]> granicus.if.org Git - clang/commitdiff
Switching the CallableWhen attribute over to using the string literal helper function...
authorAaron Ballman <aaron@aaronballman.com>
Sat, 5 Oct 2013 22:45:34 +0000 (22:45 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Sat, 5 Oct 2013 22:45:34 +0000 (22:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192050 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclAttr.cpp

index 41cc3fd285a26344582e0c5b46f85991d38679a8..1985de4c1b28efaff04351c953621c1f0d4d996e 100644 (file)
@@ -1059,25 +1059,19 @@ static void handleCallableWhenAttr(Sema &S, Decl *D,
   for (unsigned ArgIndex = 0; ArgIndex < Attr.getNumArgs(); ++ArgIndex) {
     CallableWhenAttr::ConsumedState CallableState;
     
-    if (Attr.isArgExpr(ArgIndex) &&
-        isa<StringLiteral>(Attr.getArgAsExpr(ArgIndex))) {
-      
-      Expr *Arg = Attr.getArgAsExpr(ArgIndex);
-      StringRef StateString = cast<StringLiteral>(Arg)->getString();
-      
-      if (!CallableWhenAttr::ConvertStrToConsumedState(StateString,
-                                                       CallableState)) {
-        S.Diag(Arg->getExprLoc(), diag::warn_attribute_type_not_supported)
-          << Attr.getName() << StateString;
-        return;
-      }
-      
-      States.push_back(CallableState);
-    } else {
-      S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr.getName()
-        << AANT_ArgumentString;
+    StringRef StateString;
+    SourceLocation Loc;
+    if (!S.checkStringLiteralArgumentAttr(Attr, ArgIndex, StateString, &Loc))
+      return;
+
+    if (!CallableWhenAttr::ConvertStrToConsumedState(StateString,
+                                                      CallableState)) {
+      S.Diag(Loc, diag::warn_attribute_type_not_supported)
+        << Attr.getName() << StateString;
       return;
     }
+      
+    States.push_back(CallableState);
   }
   
   D->addAttr(::new (S.Context)