r185022 - This patch fixes PR16395, when HandleMSProperty returns null due to a declaration with no name.

Aaron Ballman aaron at aaronballman.com
Wed Jun 26 14:28:44 PDT 2013


Author: aaronballman
Date: Wed Jun 26 16:28:44 2013
New Revision: 185022

URL: http://llvm.org/viewvc/llvm-project?rev=185022&view=rev
Log:
This patch fixes PR16395, when HandleMSProperty returns null due to a declaration with no name.

Patch thanks to Robert Wilhelm.

Modified:
    cfe/trunk/lib/Sema/SemaDeclCXX.cpp
    cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp

Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=185022&r1=185021&r2=185022&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Wed Jun 26 16:28:44 2013
@@ -1954,25 +1954,26 @@ Sema::ActOnCXXMemberDeclarator(Scope *S,
 
     AttributeList *MSPropertyAttr =
       getMSPropertyAttr(D.getDeclSpec().getAttributes().getList());
-    if (MSPropertyAttr) {
-      Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
-                                BitWidth, InitStyle, AS, MSPropertyAttr);
-      isInstField = false;
-    } else {
-      Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
-                                BitWidth, InitStyle, AS);
-    }
-    assert(Member && "HandleField never returns null");
-  } else {
-    assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);
-
-    Member = HandleDeclarator(S, D, TemplateParameterLists);
-    if (!Member) {
-      return 0;
-    }
-
-    // Non-instance-fields can't have a bitfield.
-    if (BitWidth) {
+    if (MSPropertyAttr) {
+      Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
+                                BitWidth, InitStyle, AS, MSPropertyAttr);
+      if (!Member)
+        return 0;
+      isInstField = false;
+    } else {
+      Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
+                                BitWidth, InitStyle, AS);
+      assert(Member && "HandleField never returns null");
+    }
+  } else {
+    assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);
+
+    Member = HandleDeclarator(S, D, TemplateParameterLists);
+    if (!Member)
+      return 0;
+
+    // Non-instance-fields can't have a bitfield.
+    if (BitWidth) {
       if (Member->isInvalidDecl()) {
         // don't emit another diagnostic.
       } else if (isa<VarDecl>(Member)) {

Modified: cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp?rev=185022&r1=185021&r2=185022&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp (original)
+++ cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp Wed Jun 26 16:28:44 2013
@@ -361,3 +361,7 @@ void SP11::UseV() {
   TakeRef(V);
   TakeVal(V);
 }
+
+struct StructWithUnnamedMember {
+  __declspec(property(get=GetV)) int : 10; // expected-error {{anonymous property is not supported}}
+};





More information about the cfe-commits mailing list