Refactored the tls_model attribute to use a custom subset subject. No functional...
authorAaron Ballman <aaron@aaronballman.com>
Fri, 29 Nov 2013 16:20:30 +0000 (16:20 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Fri, 29 Nov 2013 16:20:30 +0000 (16:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195964 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Attr.td
lib/Sema/SemaDeclAttr.cpp

index 4ca6a97709fa2f3f8025753c1c6d16bd00b6365d..71a73328a7b953d0e21273fad2a07891b3c5c090 100644 (file)
@@ -43,6 +43,9 @@ def ObjCInstanceMethod : SubsetSubject<ObjCMethod,
 def Struct : SubsetSubject<Record,
                            [{!S->isUnion()}]>;
 
+def TLSVar : SubsetSubject<Var,
+                           [{S->getTLSKind() != 0}]>;
+
 // A single argument to an attribute
 class Argument<string name, bit optional> {
   string Name = name;
@@ -220,7 +223,7 @@ def AlwaysInline : InheritableAttr {
 
 def TLSModel : InheritableAttr {
   let Spellings = [GNU<"tls_model">, CXX11<"gnu", "tls_model">];
-  let Subjects = SubjectList<[Var], ErrorDiag, "ExpectedTLSVar">;
+  let Subjects = SubjectList<[TLSVar], ErrorDiag, "ExpectedTLSVar">;
   let Args = [StringArgument<"Model">];
 }
 
index d4fb9204633d2fcf2072042f612cfe9c16f92a9c..7c5e066cc92ac11af931f0a73a18c6ad5ca20376 100644 (file)
@@ -1545,12 +1545,6 @@ static void handleTLSModelAttr(Sema &S, Decl *D,
   if (!S.checkStringLiteralArgumentAttr(Attr, 0, Model, &LiteralLoc))
     return;
 
-  if (!cast<VarDecl>(D)->getTLSKind()) {
-    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type)
-      << Attr.getName() << ExpectedTLSVar;
-    return;
-  }
-
   // Check that the value.
   if (Model != "global-dynamic" && Model != "local-dynamic"
       && Model != "initial-exec" && Model != "local-exec") {