]> granicus.if.org Git - clang/commitdiff
There is no such thing as __declspec(ms_struct), this is a GNU attribute. Switched...
authorAaron Ballman <aaron@aaronballman.com>
Wed, 20 Nov 2013 22:22:04 +0000 (22:22 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Wed, 20 Nov 2013 22:22:04 +0000 (22:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195277 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Attr.td
lib/Sema/SemaDeclAttr.cpp
test/Sema/pragma-ms_struct.c

index 4a412d1892e6f936421d9882d68bba39ae2c93b2..27a27e33a782c4ed432d2c2d6dfe8ddddad9ef34 100644 (file)
@@ -1068,7 +1068,8 @@ def MsProperty : IgnoredAttr {
 }
 
 def MsStruct : InheritableAttr {
-  let Spellings = [Declspec<"ms_struct">];
+  let Spellings = [GNU<"ms_struct">, CXX11<"gnu", "ms_struct">];
+  let Subjects = [Record];
 }
 
 def DLLExport : InheritableAttr, TargetSpecificAttr {
index 6460b040f44019fa85180a1844d8eb03ecfee8d1..16725675a41b664c3e1161f337548a418966595a 100644 (file)
@@ -1278,7 +1278,8 @@ static void handleMsStructAttr(Sema &S, Decl *D, const AttributeList &Attr) {
                 MsStructAttr(Attr.getRange(), S.Context,
                              Attr.getAttributeSpellingListIndex()));
   else
-    S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
+      << Attr.getName() << ExpectedStructOrUnionOrClass;
 }
 
 static void handleIBAction(Sema &S, Decl *D, const AttributeList &Attr) {
index 6533320e518d43509a57ba3ac7d693609071e9a5..14e7fde8b9858712de02c52247f69b50c39f8758 100644 (file)
@@ -25,7 +25,7 @@ struct {
 } __attribute__((__ms_struct__)) t1;
 
 struct S {
-                  double __attribute__((ms_struct)) d; // expected-warning {{'ms_struct' attribute ignored}}
+                  double __attribute__((ms_struct)) d; // expected-warning {{'ms_struct' attribute only applies to struct, union or class}}
                    unsigned long bf_1 : 12;
                    unsigned long : 0;
                    unsigned long bf_2 : 12;
@@ -36,7 +36,7 @@ enum
   A = 0,
   B,
   C
-} __attribute__((ms_struct)) e1; // expected-warning {{'ms_struct' attribute ignored}}
+} __attribute__((ms_struct)) e1; // expected-warning {{'ms_struct' attribute only applies to struct, union or class}}
 
 // rdar://10513599
 #pragma ms_struct on
@@ -52,10 +52,12 @@ typedef struct
 void *pv1;
 Foo foo;
 unsigned short fInited : 1;
-void *pv2;             
-} PackOddity;          
+void *pv2;
+} PackOddity;
 
 #pragma ms_struct off
 
 static int arr[sizeof(PackOddity) == 40 ? 1 : -1];
 
+__declspec(ms_struct) struct bad { // expected-warning {{unknown __declspec attribute 'ms_struct' ignored}}
+};