diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2013-12-19 00:41:31 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2013-12-19 00:41:31 +0000 |
commit | 66039937e8a9848ed5a332b156024684bf768e31 (patch) | |
tree | fc25d050ed7598c0efa6612b5163d0755b297233 /clang/lib/Sema/SemaDeclAttr.cpp | |
parent | 5df7f2e7b1033c9b7e84eb34823c20062ee5664f (diff) | |
download | bcm5719-llvm-66039937e8a9848ed5a332b156024684bf768e31.tar.gz bcm5719-llvm-66039937e8a9848ed5a332b156024684bf768e31.zip |
Added a comment about the launch_bounds attribute's AST node being required. Since there were no test cases for the attribute, some have been added. This promptly demonstrated a bug with the semantic handling, which is also fixed.
llvm-svn: 197637
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 01a1bed0d41..376d75ce6f6 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3352,7 +3352,8 @@ bool Sema::CheckRegparmAttr(const AttributeList &Attr, unsigned &numParams) { return false; } -static void handleLaunchBoundsAttr(Sema &S, Decl *D, const AttributeList &Attr){ +static void handleLaunchBoundsAttr(Sema &S, Decl *D, + const AttributeList &Attr) { // check the attribute arguments. if (Attr.getNumArgs() != 1 && Attr.getNumArgs() != 2) { // FIXME: 0 is not okay. @@ -3366,9 +3367,12 @@ static void handleLaunchBoundsAttr(Sema &S, Decl *D, const AttributeList &Attr){ return; } - uint32_t MaxThreads, MinBlocks; - if (!checkUInt32Argument(S, Attr, Attr.getArgAsExpr(0), MaxThreads, 1) || - !checkUInt32Argument(S, Attr, Attr.getArgAsExpr(1), MinBlocks, 2)) + uint32_t MaxThreads, MinBlocks = 0; + if (!checkUInt32Argument(S, Attr, Attr.getArgAsExpr(0), MaxThreads, 1)) + return; + if (Attr.getNumArgs() > 1 && !checkUInt32Argument(S, Attr, + Attr.getArgAsExpr(1), + MinBlocks, 2)) return; D->addAttr(::new (S.Context) |