<rdar://problem/13459871> Allow forward declaration of enums with a fixed underlying type in Objective-C (as well as C++11).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177930 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2013-03-25 22:22:35 +00:00
Родитель e91544210a
Коммит abde2c7f2c
2 изменённых файлов: 6 добавлений и 5 удалений

Просмотреть файл

@ -9858,7 +9858,8 @@ CreateNewDecl:
// If this is an undefined enum, warn.
if (TUK != TUK_Definition && !Invalid) {
TagDecl *Def;
if (getLangOpts().CPlusPlus11 && cast<EnumDecl>(New)->isFixed()) {
if ((getLangOpts().CPlusPlus11 || getLangOpts().ObjC2) &&
cast<EnumDecl>(New)->isFixed()) {
// C++0x: 7.2p2: opaque-enum-declaration.
// Conflicts are diagnosed above. Do nothing.
}

Просмотреть файл

@ -1,4 +1,4 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
// RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s
#if !__has_feature(objc_fixed_enum)
# error Enumerations with a fixed underlying type are not supported
@ -28,9 +28,9 @@ void test() {
// <rdar://10381507>
typedef enum : long { Foo } IntegerEnum;
int arr[(sizeof(typeof(Foo)) == sizeof(typeof(IntegerEnum))) - 1];
int arr1[(sizeof(typeof(Foo)) == sizeof(typeof(long))) - 1];
int arr2[(sizeof(typeof(IntegerEnum)) == sizeof(typeof(long))) - 1];
int arr[(sizeof(__typeof__(Foo)) == sizeof(__typeof__(IntegerEnum)))? 1 : -1];
int arr1[(sizeof(__typeof__(Foo)) == sizeof(__typeof__(long)))? 1 : -1];
int arr2[(sizeof(__typeof__(IntegerEnum)) == sizeof(__typeof__(long)))? 1 : -1];
// <rdar://problem/10760113>
typedef enum : long long { Bar = -1 } LongLongEnum;