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