1// RUN: %clang_cc1 -fsyntax-only -pedantic -std=c++98 -verify -triple x86_64-apple-darwin %s 2enum E { // expected-note{{previous definition is here}} 3 Val1, 4 Val2 5}; 6 7enum E; // expected-warning{{redeclaration of already-defined enum 'E' is a GNU extension}} 8 9int& enumerator_type(int); 10float& enumerator_type(E); 11 12void f() { 13 E e = Val1; 14 float& fr = enumerator_type(Val2); 15} 16 17// <rdar://problem/6502934> 18typedef enum Foo { 19 A = 0, 20 B = 1 21} Foo; 22 23void bar() { 24 Foo myvar = A; 25 myvar = B; 26} 27 28/// PR3688 29struct s1 { 30 enum e1 (*bar)(void); // expected-error{{ISO C++ forbids forward references to 'enum' types}} 31}; 32 33enum e1 { YES, NO }; 34 35static enum e1 badfunc(struct s1 *q) { 36 return q->bar(); 37} 38 39enum e2; // expected-error{{ISO C++ forbids forward references to 'enum' types}} 40 41namespace test1 { 42 template <class A, class B> struct is_same { static const int value = -1; }; 43 template <class A> struct is_same<A,A> { static const int value = 1; }; 44 45 enum enum0 { v0 }; 46 int test0[is_same<__typeof(+v0), int>::value]; 47 48 enum enum1 { v1 = __INT_MAX__ }; 49 int test1[is_same<__typeof(+v1), int>::value]; 50 51 enum enum2 { v2 = __INT_MAX__ * 2U }; 52 int test2[is_same<__typeof(+v2), unsigned int>::value]; 53 54 enum enum3 { v3 = __LONG_MAX__ }; 55 int test3[is_same<__typeof(+v3), long>::value]; 56 57 enum enum4 { v4 = __LONG_MAX__ * 2UL }; 58 int test4[is_same<__typeof(+v4), unsigned long>::value]; 59} 60 61// PR6061 62namespace PR6061 { 63 struct A { enum { id }; }; 64 struct B { enum { id }; }; 65 66 struct C : public A, public B 67 { 68 enum { id }; 69 }; 70} 71 72namespace Conditional { 73 enum a { A }; a x(const enum a x) { return 1?x:A; } 74} 75 76namespace PR7051 { 77 enum E { e0 }; 78 void f() { 79 E e; 80 e = 1; // expected-error{{assigning to 'PR7051::E' from incompatible type 'int'}} 81 e |= 1; // expected-error{{assigning to 'PR7051::E' from incompatible type 'int'}} 82 } 83} 84 85// PR7466 86enum { }; // expected-warning{{declaration does not declare anything}} 87typedef enum { }; // expected-warning{{typedef requires a name}} 88 89// PR7921 90enum PR7921E { 91 PR7921V = (PR7921E)(123) // expected-error {{expression is not an integral constant expression}} 92}; 93 94void PR8089() { 95 enum E; // expected-error{{ISO C++ forbids forward references to 'enum' types}} 96 int a = (E)3; // expected-error{{cannot initialize a variable of type 'int' with an rvalue of type 'E'}} 97} 98