]> granicus.if.org Git - clang/commitdiff
Add basic support for Microsoft enum forward declaration.
authorFrancois Pichet <pichet2000@gmail.com>
Sun, 12 Sep 2010 05:06:55 +0000 (05:06 +0000)
committerFrancois Pichet <pichet2000@gmail.com>
Sun, 12 Sep 2010 05:06:55 +0000 (05:06 +0000)
Assigning an underlying integral type to an enum forward declaration will come in a next patch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113716 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDecl.cpp
test/SemaCXX/MicrosoftExtensions.cpp

index da5ebc2a2569645afacd111106c5ea1f5c78e5cb..05a76a71a44ea2aa3c7cba2f56e246c947c053df 100644 (file)
@@ -1780,6 +1780,8 @@ def ext_forward_ref_enum : Extension<
   "ISO C forbids forward references to 'enum' types">;
 def err_forward_ref_enum : Error<
   "ISO C++ forbids forward references to 'enum' types">;
+def ext_ms_forward_ref_enum : Extension<
+  "forward references to 'enum' types are a Microsoft extension">, InGroup<Microsoft>;
 def ext_forward_ref_enum_def : Extension<
   "redeclaration of already-defined enum %0 is a GNU extension">, InGroup<GNU>;
   
index e4dca2ba980432c764c6bfa173b07f9bc53f8fdd..21b328d64ce9cadef1c4a214506bee9e6d13ac3f 100644 (file)
@@ -5755,9 +5755,12 @@ CreateNewDecl:
           << New;
         Diag(Def->getLocation(), diag::note_previous_definition);
       } else {
-        Diag(Loc, 
-             getLangOptions().CPlusPlus? diag::err_forward_ref_enum
-                                       : diag::ext_forward_ref_enum);
+        unsigned DiagID = diag::ext_forward_ref_enum;
+        if (getLangOptions().Microsoft)
+          DiagID = diag::ext_ms_forward_ref_enum;
+        else if (getLangOptions().CPlusPlus)
+          DiagID = diag::err_forward_ref_enum;
+        Diag(Loc, DiagID);
       }
     }
   } else {
index 93650a53f443b0c549a6edc0548c36eebf36dff5..7cc1675f2e737661737dc48381619fa4d6961168 100644 (file)
@@ -84,3 +84,7 @@ void m1() {
   h1<int>(&M::addP);
   h1(&M::subtractP);
 } 
+
+//MSVC allows forward enum declaration
+enum ENUM; // expected-warning {{forward references to 'enum' types are a Microsoft extension}}
+ENUM *var;