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