1fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu// RUN: %clang_cc1 -fsyntax-only %s -verify
2fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu
3fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieuenum A { A1, A2, A3 };
4fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieuvoid test() {
5fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu  A a;
6fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu  a++;  // expected-error{{cannot increment expression of enum type 'A'}}
7fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu  a--;  // expected-error{{cannot decrement expression of enum type 'A'}}
8fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu  ++a;  // expected-error{{cannot increment expression of enum type 'A'}}
9fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu  --a;  // expected-error{{cannot decrement expression of enum type 'A'}}
10fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu}
11fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu
12fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieuenum B {B1, B2};
13fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieuinline B &operator++ (B &b) { b = B((int)b+1); return b; }
14fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieuinline B operator++ (B &b, int) { B ret = b; ++b; return b; }
15fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieu
16fbbdc5daee4dc772d4d137080890fd79492592d6Richard Trieuvoid foo(enum B b) { ++b; b++; }
17