Clang Project

clang_source_code/test/Sema/fixed-enum.c
1// RUN: %clang_cc1 -Weverything -xc++ -std=c++11 -DCXX11 -verify %s
2// RUN: %clang_cc1 -Weverything -xc++ -std=c++03 -DCXX03 -verify %s
3// RUN: %clang_cc1 -Weverything -xobjective-c -DOBJC -verify %s
4// RUN: %clang_cc1 -Weverything -std=c11 -xc -DC11 -verify %s
5// RUN: %clang_cc1 -pedantic    -std=c11 -xc -DC11 -verify %s
6// RUN: %clang_cc1 -Weverything -std=c11 -xc -fms-extensions -DMS -verify %s
7
8enum X : int {e};
9#if defined(CXX11)
10// expected-warning@-2{{enumeration types with a fixed underlying type are incompatible with C++98}}
11#elif defined(CXX03)
12// expected-warning@-4{{enumeration types with a fixed underlying type are a C++11 extension}}
13#elif defined(OBJC)
14// No diagnostic
15#elif defined(C11)
16// expected-warning@-8{{enumeration types with a fixed underlying type are a Clang extension}}
17#elif defined(MS)
18// expected-warning@-10{{enumeration types with a fixed underlying type are a Microsoft extension}}
19#endif
20
21// Don't warn about the forward declaration in any language mode.
22enum Fwd : int;
23enum Fwd : int { e2 };
24#ifndef OBJC
25// expected-warning@-3 {{enumeration types with a fixed underlying type}}
26// expected-warning@-3 {{enumeration types with a fixed underlying type}}
27#endif
28
29// Always error on the incompatible redeclaration.
30enum BadFwd : int;
31#ifndef OBJC
32// expected-warning@-2 {{enumeration types with a fixed underlying type}}
33#endif
34// expected-note@-4 {{previous declaration is here}}
35enum BadFwd : char { e3 };
36#ifndef OBJC
37// expected-warning@-2 {{enumeration types with a fixed underlying type}}
38#endif
39// expected-error@-4 {{enumeration redeclared with different underlying type 'char' (was 'int')}}
40