diff options
| author | Aaron Ballman <aaron@aaronballman.com> | 2014-12-19 16:42:04 +0000 |
|---|---|---|
| committer | Aaron Ballman <aaron@aaronballman.com> | 2014-12-19 16:42:04 +0000 |
| commit | 55ef1515021a9dea737bea38468950999945884a (patch) | |
| tree | 14ee6f62c79b6eadc6b08364b91a26ac097717a3 /clang/lib/Sema | |
| parent | 284c249a6304e9804f89fe8b2561bcaf5fbdc616 (diff) | |
| download | bcm5719-llvm-55ef1515021a9dea737bea38468950999945884a.tar.gz bcm5719-llvm-55ef1515021a9dea737bea38468950999945884a.zip | |
Attributes accepting an EnumArgument are allowed to pass a string literal, or an identifier. VariadicEnumArguments now behave consistently instead of only accepting a string literal.
This change affects the only attribute accepting a variadic enumeration: callable_when.
llvm-svn: 224582
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 6248f6c78be..f1f369401cd 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -863,8 +863,14 @@ static void handleCallableWhenAttr(Sema &S, Decl *D, StringRef StateString; SourceLocation Loc; - if (!S.checkStringLiteralArgumentAttr(Attr, ArgIndex, StateString, &Loc)) - return; + if (Attr.isArgIdent(ArgIndex)) { + IdentifierLoc *Ident = Attr.getArgAsIdent(ArgIndex); + StateString = Ident->Ident->getName(); + Loc = Ident->Loc; + } else { + if (!S.checkStringLiteralArgumentAttr(Attr, ArgIndex, StateString, &Loc)) + return; + } if (!CallableWhenAttr::ConvertStrToConsumedState(StateString, CallableState)) { |

