// RUN: %clang_cc1 %s -fopenacc -Wno-unused-value -verify 

void NormalFunc(int I) {
  // No clauses are valid, but we parse them anyway, just mark them as not valid
  // on this construct.
 
  // expected-error@+1{{OpenACC 'copy' clause is not valid on 'atomic' directive}}
#pragma acc atomic copy(I)
  I = I + 1;
  // expected-error@+1{{OpenACC 'copy' clause is not valid on 'atomic' directive}}
#pragma acc atomic read copy(I)
  I = I;
}

struct Struct{
  Struct *getPtr();
  Struct &operator++();
  Struct &operator--();
  Struct &operator++(int);
  Struct &operator--(int);

  Struct &operator+=(int);
  Struct &operator*=(int);
  Struct &operator-=(int);
  Struct &operator/=(int);
  Struct &operator&=(int);
  Struct &operator|=(int);
  Struct &operator<<=(int);
  Struct &operator>>=(int);
  Struct &operator^=(int);
  Struct &operator%=(int);
  Struct &operator!=(int);
  Struct &operator+();
  Struct &operator-();

  operator int();
  void operator()();
  Struct &operator*();
  Struct &operator=(int);
};

int operator+(Struct&, int);
int operator+(int, Struct&);
Struct &operator+(Struct&, Struct&);
Struct &operator*(Struct&, Struct&);
Struct &operator-(Struct&, Struct&);

Struct S1, S2;

struct NotCondition{} NC;

template<typename T>
T &getRValue();

void IfClause(int x, int v) {
  // expected-error@+1{{OpenACC 'seq' clause is not valid on 'atomic' directive}}
#pragma acc atomic read seq
  x = v;

  // expected-error@+1{{expected '('}}
#pragma acc atomic read if
  x = v;

  // expected-error@+1{{value of type 'struct NotCondition' is not contextually convertible to 'bool'}}
#pragma acc atomic read if(NC)
  x = v;

  // expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'atomic' directive}}
  // expected-note@+1{{previous clause is here}}
#pragma acc atomic read if(x) if (v)
  x = v;
}

template<typename T>
void AtomicReadTemplate(T LHS, T RHS) {
#pragma acc atomic read
  LHS = RHS;

  T *LHSPtr, *RHSPtr;

#pragma acc atomic read
  LHSPtr = RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{right operand to assignment expression must be an l-value}}
#pragma acc atomic read
  LHS = RHS + 1;

#pragma acc atomic read
  *LHSPtr = RHS;

#pragma acc atomic read
  LHS = *RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{right operand to assignment expression must be an l-value}}
#pragma acc atomic read
  LHS = getRValue<T>();
}

template<typename T>
void AtomicReadTemplate2(T LHS, T RHS) {
  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic read
  LHS = RHS;

  T *LHSPtr, *RHSPtr;
  // Fine, now a pointer.
#pragma acc atomic read
  LHSPtr = RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{right operand to assignment expression must be an l-value}}
#pragma acc atomic read
  LHS = *RHS.getPtr();

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic read
  *LHSPtr = RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic read
  LHS = *RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be an l-value}}
#pragma acc atomic read
  getRValue<T>() = getRValue<T>();

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{right operand to assignment expression must be an l-value}}
#pragma acc atomic read
  LHS = getRValue<T>();
}

void AtomicRead(int LHS, int RHS) {
  AtomicReadTemplate(LHS, RHS);
  AtomicReadTemplate2(S1, S2); // expected-note{{in instantiation of function template specialization}}

#pragma acc atomic read
  LHS = RHS;

  int *LHSPtr, *RHSPtr;

#pragma acc atomic read
  LHSPtr = RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic read
  S1 = S2;

  // expected-error@+2{{statement associated with OpenACC 'atomic read' directive is invalid}}
  // expected-note@+2{{right operand to assignment expression must be an l-value}}
#pragma acc atomic read
  LHS = RHS + 1;

#pragma acc atomic read
  *LHSPtr = RHS;

#pragma acc atomic read
  LHS = *RHSPtr;

  // There is no way to test that = is an overloaded operator, since there
  // really isn't a way to create an operator= without a class type on one side
  // or the other.
}

template<typename T>
void AtomicWriteTemplate(T LHS, T RHS) {
#pragma acc atomic write
  LHS = RHS;

  T *LHSPtr, *RHSPtr;
#pragma acc atomic write
  LHSPtr = RHSPtr;

#pragma acc atomic write
  *LHSPtr = *RHSPtr;

  // allowed, expr is ok.
#pragma acc atomic write
  LHS = *RHSPtr;

#pragma acc atomic write
  LHS = RHS * 2;

  // expected-error@+2{{statement associated with OpenACC 'atomic write' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be an l-value}}
#pragma acc atomic write
  getRValue<T>() = getRValue<T>();

#pragma acc atomic write
  LHS = getRValue<T>();
}

template<typename T>
void AtomicWriteTemplate2(T LHS, T RHS) {
  // expected-error@+2{{statement associated with OpenACC 'atomic write' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic write
  LHS = RHS;

  T *LHSPtr, *RHSPtr;
#pragma acc atomic write
  LHSPtr = RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic write' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic write
  LHS = *RHSPtr;

#pragma acc atomic write
  LHSPtr = RHS.getPtr();

  // expected-error@+2{{statement associated with OpenACC 'atomic write' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be an l-value}}
#pragma acc atomic write
  getRValue<T>() = getRValue<T>();

  // expected-error@+2{{statement associated with OpenACC 'atomic write' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic write
  LHS = getRValue<T>();
}

void AtomicWrite(int LHS, int RHS) {
  AtomicWriteTemplate(LHS, RHS);
  AtomicWriteTemplate2(S1, S2); // expected-note{{in instantiation of function template specialization}}

#pragma acc atomic write
  LHS = RHS;

  int *LHSPtr, *RHSPtr;
#pragma acc atomic write
  LHSPtr = RHSPtr;

#pragma acc atomic write
  *LHSPtr = *RHSPtr;

  // allowed, expr is ok.
#pragma acc atomic write
  LHS = *RHSPtr;

#pragma acc atomic write
  LHS = RHS * 2;
}

template<typename T>
void AtomicUpdateTemplate(T LHS, T RHS) {
#pragma acc atomic
  LHS++;

#pragma acc atomic update
  LHS--;

#pragma acc atomic
  ++LHS;

#pragma acc atomic update
  --LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic
  +LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic update
  -LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{expected binary operation on right hand side of assignment operator}}
#pragma acc atomic update
  LHS = RHS;

  T *LHSPtr, *RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{expected binary operation on right hand side of assignment operator}}
#pragma acc atomic
  *LHSPtr = *RHSPtr;

  // x binop= expr;
#pragma acc atomic
  LHS += 1 + RHS;
#pragma acc atomic update
  LHS *= 1 + RHS;
#pragma acc atomic
  LHS -= 1 + RHS;
#pragma acc atomic update
  LHS /= 1 + RHS;
#pragma acc atomic
  LHS &= 1 + RHS;
#pragma acc atomic update
  LHS ^= 1 + RHS;
#pragma acc atomic
  LHS |= 1 + RHS;
#pragma acc atomic update
  LHS <<= 1 + RHS;
#pragma acc atomic
  LHS >>= 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  LHS != 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  LHS <= 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  LHS >= 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  LHS %= 1 + RHS;

  // x = x binop expr.
#pragma acc atomic
  LHS = LHS + getRValue<T>();
#pragma acc atomic update
  LHS = LHS * getRValue<T>();
#pragma acc atomic update
  LHS = LHS - getRValue<T>();
#pragma acc atomic update
  LHS = LHS / getRValue<T>();
#pragma acc atomic update
  LHS = LHS & getRValue<T>();
#pragma acc atomic update
  LHS = LHS ^ getRValue<T>();
#pragma acc atomic update
  LHS = LHS | getRValue<T>();
#pragma acc atomic update
  LHS = LHS << getRValue<T>();
#pragma acc atomic update
  LHS = LHS >> getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = LHS < getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = LHS > getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = LHS <= getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = LHS >= getRValue<T>();
#pragma acc atomic update
  LHS = LHS ^ getRValue<T>();


  // x = expr binop x.
#pragma acc atomic
  LHS = getRValue<T>() + LHS;
#pragma acc atomic update
  LHS = getRValue<T>() * LHS;
#pragma acc atomic update
  LHS = getRValue<T>() - LHS;
#pragma acc atomic update
  LHS = getRValue<T>() / LHS;
#pragma acc atomic update
  LHS = getRValue<T>() & LHS;
#pragma acc atomic update
  LHS = getRValue<T>() ^ LHS;
#pragma acc atomic update
  LHS = getRValue<T>() | LHS;
#pragma acc atomic update
  LHS = getRValue<T>() << LHS;
#pragma acc atomic update
  LHS = getRValue<T>() >> LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = getRValue<T>() < LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = getRValue<T>() > LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = getRValue<T>() <= LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic update
  LHS = getRValue<T>() >= LHS;
#pragma acc atomic update
  LHS = getRValue<T>() ^ LHS;

#pragma acc atomic update
  LHS = LHS + getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and 'getRValue<T>()')}}
#pragma acc atomic update
  LHS = RHS + getRValue<T>();

#pragma acc atomic update
  LHS = getRValue<T>() - LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('getRValue<T>()' and 'RHS')}}
#pragma acc atomic update
  LHS = getRValue<T>() + RHS;
}

template<typename T>
void AtomicUpdateTemplate2(T LHS, T RHS) {
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{operand to increment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS++;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{operand to decrement expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS--;

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{operand to increment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  ++LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{operand to decrement expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  --LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic
  +LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic update
  -LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic
  LHS();

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic
  *LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{expected binary operation on right hand side of assignment operator}}
#pragma acc atomic update
  LHS = RHS;

  T *LHSPtr, *RHSPtr;

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{expected binary operation on right hand side of assignment operator}}
#pragma acc atomic
  *LHSPtr = *RHSPtr;

  // x binop= expr;
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS += 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS *= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS -= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS /= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS &= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS ^= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS |= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS <<= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS >>= 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  LHS != 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  LHS %= 1 + RHS;

  // x = x binop expr.
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS = LHS + getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS = LHS * getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS = LHS - getRValue<T>();

  // x = expr binop x.
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  LHS = getRValue<T>() + LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS = getRValue<T>() * LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS = getRValue<T>() - LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS = LHS + getRValue<T>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and 'getRValue<T>()')}}
#pragma acc atomic update
  LHS = RHS + getRValue<T>();

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  LHS = getRValue<T>() - LHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('getRValue<T>()' and 'RHS')}}
#pragma acc atomic update
  LHS = getRValue<T>() + RHS;
}

void AtomicUpdate() {
  AtomicUpdateTemplate(1, 2);
  AtomicUpdateTemplate2(S1, S2); //expected-note{{in instantiation of function template specialization}}

  int I, J;

#pragma acc atomic
  I++;
#pragma acc atomic update
  --I;
  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{operand to increment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic
  S1++;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{operand to decrement expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  --S2;

  // expected-error@+2{{statement associated with OpenACC 'atomic' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic
  +I;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic update
  -J;

#pragma acc atomic update
  I ^= 1 + J;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  I%= 1 + J;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic update
  S1 ^= 1 + J;

  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic update
  S2 %= 1 + J;

#pragma acc atomic update
  I = I + getRValue<int>();
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('I') must match one side of the sub-operation on the right hand side('J' and 'getRValue<int>()')}}
#pragma acc atomic update
  I = J + getRValue<int>();

#pragma acc atomic update
  I = getRValue<int>() - I;
  // expected-error@+2{{statement associated with OpenACC 'atomic update' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('I') must match one side of the sub-operation on the right hand side('getRValue<int>()' and 'J')}}
#pragma acc atomic update
  I = getRValue<int>() + J;
}

template<typename T>
void AtomicCaptureTemplateSimple(T LHS, T RHS) {
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
  LHS++;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
--LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
  LHS += 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  LHS = RHS;

#pragma acc atomic capture
  LHS = RHS++;

#pragma acc atomic capture
  LHS = RHS--;

#pragma acc atomic capture
  LHS = ++RHS;

#pragma acc atomic capture
  LHS = --RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic capture
  LHS = +RHS;

#pragma acc atomic capture
  LHS = RHS += 1 + RHS;
#pragma acc atomic capture
  LHS = RHS *= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS -= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS /= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS &= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS ^= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS >>= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS |= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS <<= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS >>= 1 + RHS;

#pragma acc atomic capture
  LHS = RHS ^= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS <= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS >= 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS + 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS < 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS > 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS ^ 1 + RHS;

#pragma acc atomic capture
  LHS = RHS = RHS + 1;
#pragma acc atomic capture
  LHS = RHS = 1 + RHS;
#pragma acc atomic capture
  LHS = RHS = RHS * 1;
#pragma acc atomic capture
  LHS = RHS = 1 * RHS;
#pragma acc atomic capture
  LHS = RHS = RHS / 1;
#pragma acc atomic capture
  LHS = RHS = 1 / RHS;
#pragma acc atomic capture
  LHS = RHS = RHS ^ 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = 1 % RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = RHS < 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = 1 > RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and 'getRValue<T>()')}}
#pragma acc atomic capture
  LHS = LHS = RHS + getRValue<T>();

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('getRValue<T>()' and 'RHS')}}
#pragma acc atomic capture
  LHS = LHS = getRValue<T>() + RHS;
}
template<typename T>
void AtomicCaptureTemplateSimple2(T LHS, T RHS) {
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
  LHS++;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
--LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
  LHS += 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  LHS = RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS++;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS--;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = ++RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = --RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic capture
  LHS = +RHS;


  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS += 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS *= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS -= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS /= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS &= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS ^= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS >>= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS |= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS <<= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS >>= 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS ^= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS <= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS >= 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS + 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS < 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS > 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS ^ 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS = RHS + 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS = 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS = RHS * 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS = 1 * RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS = RHS / 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS = 1 / RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  LHS = RHS = RHS ^ 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = 1 % RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = RHS < 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = 1 > RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and 'getRValue<T>()')}}
#pragma acc atomic capture
  LHS = LHS = RHS + getRValue<T>();

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('getRValue<T>()' and 'RHS')}}
#pragma acc atomic capture
  LHS = LHS = getRValue<T>() + RHS;
}

void AtomicCaptureSimple(int LHS, int RHS) {
  AtomicCaptureTemplateSimple(1, 2);
  AtomicCaptureTemplateSimple2(S1, S2); //expected-note{{in instantiation of function template specialization}}

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
  LHS++;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
--LHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment expression}}
#pragma acc atomic capture
  LHS += 1 + RHS;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  LHS = RHS;

#pragma acc atomic capture
  LHS = RHS++;

#pragma acc atomic capture
  LHS = RHS--;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  S1 = ++S2;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  S1 = --S2 ;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{unary operator not supported, only increment and decrement operations permitted}}
#pragma acc atomic capture
  LHS = +RHS;

#pragma acc atomic capture
  LHS = RHS += 1 + RHS;
#pragma acc atomic capture
  LHS = RHS *= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  S1 = RHS -= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  LHS = S1 /= 1 + RHS;
#pragma acc atomic capture
  LHS = RHS &= 1 + S2;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  LHS = S1^= 1 + S2;

#pragma acc atomic capture
  LHS = RHS ^= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS <= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  S1 = RHS ^= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = S1 <= 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{compound binary operator not supported, only +=, *=, -=, /=, &=, ^=, |=, <<=, or >>= are permitted}}
#pragma acc atomic capture
  LHS = RHS <= 1 + S2;

#pragma acc atomic capture
  LHS = RHS = RHS + 1;
#pragma acc atomic capture
  LHS = RHS = 1 + RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  S1 = RHS = RHS * 1;
  // A little weird, because this contains a 'operator int' call here rather
  // than a conversion, so the diagnostic could be better.
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  LHS = S2 = 1 * S2;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = RHS < 1;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{binary operator not supported, only +, *, -, /, &, ^, |, <<, or >> are permitted}}
#pragma acc atomic capture
  LHS = RHS = 1 > RHS;
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left operand to assignment expression must be of scalar type (was 'Struct')}}
#pragma acc atomic capture
  S1 = RHS = RHS < 1;

  // A little weird, because this contains a 'operator int' call here rather
  // than a conversion, so the diagnostic could be better.
  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  LHS = S1 = 1 > S1;

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and 'getRValue<int>()')}}
#pragma acc atomic capture
  LHS = LHS = RHS + getRValue<int>();

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('getRValue<int>()' and 'RHS')}}
#pragma acc atomic capture
  LHS = LHS = getRValue<int>() + RHS;
}

template<typename T>
void AtomicCaptureTemplateCompound(T LHS, T RHS) {

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  {
  }

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+4{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  {
    LHS = RHS;
  }

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+3{{'atomic capture' with a compound statement only supports two statements}}
#pragma acc atomic capture
  {
    LHS = RHS; RHS += 1; LHS=RHS;
  }


#pragma acc atomic capture
  {
    LHS++;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    ++LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    --LHS;
    RHS = LHS;
  }


#pragma acc atomic capture
  {
    LHS--;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used in unary expression('LHS') from the first statement}}
    LHS = RHS;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{unary operator not supported, only increment and decrement operations permitted}}
    -LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    --LHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x binop = expr; v = x; }
#pragma acc atomic capture
  {
    LHS += 1;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS *= 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of compound assignment('LHS') from the first statement}}
    LHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS /= 1;
  // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x = x binop expr; v = x; }
#pragma acc atomic capture
  {
    LHS = LHS + 1;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
  // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and '1')}}
    LHS = RHS - 1;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS * 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of assignment('LHS') from the first statement}}
    RHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS / 1;
  // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x = expr binop x; v = x; }
#pragma acc atomic capture
  {
    LHS = 1 ^ LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('1' and 'RHS')}}
    LHS = 1 & RHS;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS | 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of assignment('LHS') from the first statement}}
    RHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS << 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { v = x; x binop = expr; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS += 1;
  }

  // { v = x; x = x binop expr; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS = RHS / 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('RHS') must match one side of the sub-operation on the right hand side('LHS' and '1')}}
    RHS = LHS ^ 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and '1')}}
    LHS = RHS << 1;
  }
  // { v = x; x = expr binop x; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS = 1 / RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('RHS') must match one side of the sub-operation on the right hand side('1' and 'LHS')}}
    RHS = 1 ^ LHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('1' and 'RHS')}}
    LHS = 1 << RHS;
  }

  // { v = x; x = expr; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS = 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on left hand side of assignment('LHS') must match variable used on right hand side of assignment('RHS') from the first statement}}
    LHS = 1;
  }

  // { v = x; x++; }
  // { v = x; ++x; }
  // { v = x; x--; }
  // { v = x; --x; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS++;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS--;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    ++RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    --RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{unary operator not supported, only increment and decrement operations permitted}}
    -RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable in unary expression('LHS') must match variable used on right hand side of assignment('RHS') from the first statement}}
    LHS++;
  }
}

template<typename T>
void AtomicCaptureTemplateCompound2(T LHS, T RHS) {

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  {
  }

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+4{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  {
    LHS = RHS;
  }

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+3{{'atomic capture' with a compound statement only supports two statements}}
#pragma acc atomic capture
  {
    LHS = RHS; RHS += 1; LHS=RHS;
  }


#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{operand to increment expression must be of scalar type (was 'Struct')}}
    LHS++;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{operand to increment expression must be of scalar type (was 'Struct')}}
    ++LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{operand to decrement expression must be of scalar type (was 'Struct')}}
    --LHS;
    RHS = LHS;
  }


#pragma acc atomic capture
  {
    LHS--;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used in unary expression('LHS') from the first statement}}
    LHS = RHS;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{unary operator not supported, only increment and decrement operations permitted}}
    -LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    --LHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x binop = expr; v = x; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
    LHS += 1;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS *= 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of compound assignment('LHS') from the first statement}}
    LHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS /= 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x = x binop expr; v = x; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = LHS + 1;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
  // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and '1')}}
    LHS = RHS - 1;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS * 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of assignment('LHS') from the first statement}}
    RHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS / 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x = expr binop x; v = x; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = 1 ^ LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
  // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('1' and 'RHS')}}
    LHS = 1 & RHS;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS | 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of assignment('LHS') from the first statement}}
    RHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS << 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { v = x; x binop = expr; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    RHS += 1;
  }

  // { v = x; x = x binop expr; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    RHS = RHS / 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('RHS') must match one side of the sub-operation on the right hand side('LHS' and '1')}}
    RHS = LHS ^ 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and '1')}}
    LHS = RHS << 1;
  }
  // { v = x; x = expr binop x; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    RHS = 1 / RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('RHS') must match one side of the sub-operation on the right hand side('1' and 'LHS')}}
    RHS = 1 ^ LHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('1' and 'RHS')}}
    LHS = 1 << RHS;
  }

  // { v = x; x = expr; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    RHS = 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on left hand side of assignment('LHS') must match variable used on right hand side of assignment('RHS') from the first statement}}
    LHS = 1;
  }

  // { v = x; x++; }
  // { v = x; ++x; }
  // { v = x; x--; }
  // { v = x; --x; }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    RHS++;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    RHS--;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    ++RHS;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    LHS = RHS;
    --RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{unary operator not supported, only increment and decrement operations permitted}}
    -RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable in unary expression('LHS') must match variable used on right hand side of assignment('RHS') from the first statement}}
    LHS++;
  }
}
void AtomicCaptureCompound(int LHS, int RHS) {
  AtomicCaptureTemplateCompound(1, 2); 
  AtomicCaptureTemplateCompound2(S1, S2); //expected-note{{in instantiation of function template specialization}}

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+2{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  {
  }

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+4{{expected assignment, compound assignment, increment, or decrement expression}}
#pragma acc atomic capture
  {
    LHS = RHS;
  }

  // expected-error@+2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+3{{'atomic capture' with a compound statement only supports two statements}}
#pragma acc atomic capture
  {
    LHS = RHS; RHS += 1; LHS=RHS;
  }


#pragma acc atomic capture
  {
    LHS++;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{operand to increment expression must be of scalar type (was 'Struct')}}
    S1++;
    S2= S1;
  }

#pragma acc atomic capture
  {
    ++LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    --LHS;
    RHS = LHS;
  }


#pragma acc atomic capture
  {
    LHS--;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used in unary expression('LHS') from the first statement}}
    LHS = RHS;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{unary operator not supported, only increment and decrement operations permitted}}
    -LHS;
    RHS = LHS;
  }

#pragma acc atomic capture
  {
    --LHS;
  // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x binop = expr; v = x; }
#pragma acc atomic capture
  {
    LHS += 1;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to compound assignment expression must be of scalar type (was 'Struct')}}
    S1 += 1;
    S2= S1;
  }
#pragma acc atomic capture
  {
    LHS *= 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of compound assignment('LHS') from the first statement}}
    LHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS /= 1;
  // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x = x binop expr; v = x; }
#pragma acc atomic capture
  {
    LHS = LHS + 1;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    S1 = S1 + 1;
    S2= S1;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and '1')}}
    LHS = RHS - 1;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS * 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of assignment('LHS') from the first statement}}
    RHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS / 1;
  // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { x = expr binop x; v = x; }
#pragma acc atomic capture
  {
    LHS = 1 ^ LHS;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    S1 = 1 ^ S1;
    S2 = S1;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('1' and 'RHS')}}
    LHS = 1 & RHS;
    RHS = LHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS | 1;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on right hand side of assignment('RHS') must match variable used on left hand side of assignment('LHS') from the first statement}}
    RHS = RHS;
  }
#pragma acc atomic capture
  {
    LHS = LHS << 1;
  // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
  // expected-note@+1{{expected assignment expression}}
    RHS += LHS;
  }

  // { v = x; x binop = expr; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS += 1;
  }

#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    S1 = S2;
    S2 += 1;
  }

  // { v = x; x = x binop expr; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS = RHS / 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('RHS') must match one side of the sub-operation on the right hand side('LHS' and '1')}}
    RHS = LHS ^ 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('RHS' and '1')}}
    LHS = RHS << 1;
  }
  // { v = x; x = expr binop x; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS = 1 / RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('RHS') must match one side of the sub-operation on the right hand side('1' and 'LHS')}}
    RHS = 1 ^ LHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left hand side of assignment operation('LHS') must match one side of the sub-operation on the right hand side('1' and 'RHS')}}
    LHS = 1 << RHS;
  }

  // { v = x; x = expr; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS = 1;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable on left hand side of assignment('LHS') must match variable used on right hand side of assignment('RHS') from the first statement}}
    LHS = 1;
  }

  // { v = x; x++; }
  // { v = x; ++x; }
  // { v = x; x--; }
  // { v = x; --x; }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS++;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    RHS--;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    ++RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    --RHS;
  }
#pragma acc atomic capture
  {
    // expected-error@-2{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{left operand to assignment expression must be of scalar type (was 'Struct')}}
    S1= S2;
    --S2;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{unary operator not supported, only increment and decrement operations permitted}}
    -RHS;
  }
#pragma acc atomic capture
  {
    LHS = RHS;
    // expected-error@-3{{statement associated with OpenACC 'atomic capture' directive is invalid}}
    // expected-note@+1{{variable in unary expression('LHS') must match variable used on right hand side of assignment('RHS') from the first statement}}
    LHS++;
  }
}
