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

Patch thanks to Robert Wilhelm.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185022 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 4e5e307..45cf57f 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -1954,25 +1954,26 @@
 
     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)) {
diff --git a/test/SemaCXX/MicrosoftExtensions.cpp b/test/SemaCXX/MicrosoftExtensions.cpp
index 217fc6e..e82c47e 100644
--- a/test/SemaCXX/MicrosoftExtensions.cpp
+++ b/test/SemaCXX/MicrosoftExtensions.cpp
@@ -361,3 +361,7 @@
   TakeRef(V);
   TakeVal(V);
 }
+
+struct StructWithUnnamedMember {
+  __declspec(property(get=GetV)) int : 10; // expected-error {{anonymous property is not supported}}
+};