Daniel Dunbar | d7d5f02 | 2009-03-24 02:24:46 +0000 | [diff] [blame] | 1 | // RUN: clang-cc -fsyntax-only -verify %s |
Douglas Gregor | 93afb0d | 2008-12-12 07:27:10 +0000 | [diff] [blame] | 2 | enum E { |
3 | Val1, | ||||
4 | Val2 | ||||
5 | }; | ||||
6 | |||||
7 | int& enumerator_type(int); | ||||
8 | float& enumerator_type(E); | ||||
9 | |||||
10 | void f() { | ||||
11 | E e = Val1; | ||||
12 | float& fr = enumerator_type(Val2); | ||||
13 | } | ||||
Douglas Gregor | 66b947f | 2009-01-16 19:38:23 +0000 | [diff] [blame] | 14 | |
15 | // <rdar://problem/6502934> | ||||
16 | typedef enum Foo { | ||||
Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 17 | A = 0, |
18 | B = 1 | ||||
Douglas Gregor | 66b947f | 2009-01-16 19:38:23 +0000 | [diff] [blame] | 19 | } Foo; |
Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 20 | |
Douglas Gregor | 66b947f | 2009-01-16 19:38:23 +0000 | [diff] [blame] | 21 | void bar() { |
Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 22 | Foo myvar = A; |
23 | myvar = B; | ||||
Douglas Gregor | 66b947f | 2009-01-16 19:38:23 +0000 | [diff] [blame] | 24 | } |
Douglas Gregor | 80711a2 | 2009-03-06 18:34:03 +0000 | [diff] [blame] | 25 | |
26 | /// PR3688 | ||||
27 | struct s1 { | ||||
John McCall | 5023437 | 2009-12-04 00:07:04 +0000 | [diff] [blame] | 28 | enum e1 (*bar)(void); // expected-error{{ISO C++ forbids forward references to 'enum' types}} |
Douglas Gregor | 80711a2 | 2009-03-06 18:34:03 +0000 | [diff] [blame] | 29 | }; |
30 | |||||
31 | enum e1 { YES, NO }; | ||||
32 | |||||
33 | static enum e1 badfunc(struct s1 *q) { | ||||
John McCall | 5023437 | 2009-12-04 00:07:04 +0000 | [diff] [blame] | 34 | return q->bar(); |
Douglas Gregor | 80711a2 | 2009-03-06 18:34:03 +0000 | [diff] [blame] | 35 | } |
36 | |||||
37 | enum e2; // expected-error{{ISO C++ forbids forward references to 'enum' types}} |