diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-08-14 13:13:47 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-08-14 13:13:47 +0000 |
commit | 833fb9f7e39e7aa6f60fbac341968e5a6fdafb81 (patch) | |
tree | 65d46c3704201db15183565b8a97d958ab3d3636 /clang/lib/Sema/SemaDeclAttr.cpp | |
parent | ef7758f561838a966113a725d18a11f5ef57fab4 (diff) | |
download | bcm5719-llvm-833fb9f7e39e7aa6f60fbac341968e5a6fdafb81.tar.gz bcm5719-llvm-833fb9f7e39e7aa6f60fbac341968e5a6fdafb81.zip |
Fix horribly broken sema of __attribute__((pcs())).
llvm-svn: 161863
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 22bff863c5c..37c4948cb14 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3560,10 +3560,9 @@ bool Sema::CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC) { if (attr.isInvalid()) return true; - if ((attr.getNumArgs() != 0 && - !(attr.getKind() == AttributeList::AT_Pcs && attr.getNumArgs() == 1)) || - attr.getParameterName()) { - Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0; + unsigned ReqArgs = attr.getKind() == AttributeList::AT_Pcs ? 1 : 0; + if (attr.getNumArgs() != ReqArgs || attr.getParameterName()) { + Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << ReqArgs; attr.setInvalid(); return true; } @@ -3594,7 +3593,10 @@ bool Sema::CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC) { CC = CC_AAPCS_VFP; break; } - // FALLS THROUGH + + attr.setInvalid(); + Diag(attr.getLoc(), diag::err_invalid_pcs); + return true; } default: llvm_unreachable("unexpected attribute kind"); } |