]> granicus.if.org Git - clang/commitdiff
This patch fixes PR16395, when HandleMSProperty returns null due to a declaration...
authorAaron Ballman <aaron@aaronballman.com>
Wed, 26 Jun 2013 21:28:44 +0000 (21:28 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Wed, 26 Jun 2013 21:28:44 +0000 (21:28 +0000)
Patch thanks to Robert Wilhelm.

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

lib/Sema/SemaDeclCXX.cpp
test/SemaCXX/MicrosoftExtensions.cpp

index 4e5e307be6142e9b3ca92ba8c71a43ec30a2cca7..45cf57feea9024350da5b200d6f2fd3366b20475 100644 (file)
@@ -1954,25 +1954,26 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
 
     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) {\r
+      Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,\r
+                                BitWidth, InitStyle, AS, MSPropertyAttr);\r
+      if (!Member)\r
+        return 0;\r
+      isInstField = false;\r
+    } else {\r
+      Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,\r
+                                BitWidth, InitStyle, AS);\r
+      assert(Member && "HandleField never returns null");\r
+    }\r
+  } else {\r
+    assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);\r
+\r
+    Member = HandleDeclarator(S, D, TemplateParameterLists);\r
+    if (!Member)\r
+      return 0;\r
+\r
+    // Non-instance-fields can't have a bitfield.\r
+    if (BitWidth) {\r
       if (Member->isInvalidDecl()) {
         // don't emit another diagnostic.
       } else if (isa<VarDecl>(Member)) {
index 217fc6e6d7907d43dc5d83d951a76aaec1d84ca5..e82c47eb586d9e5e39eb43ab71f7c9942bca31f8 100644 (file)
@@ -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}}
+};