diff options
author | Leonard Chan <leonardchan@google.com> | 2019-05-10 18:05:15 +0000 |
---|---|---|
committer | Leonard Chan <leonardchan@google.com> | 2019-05-10 18:05:15 +0000 |
commit | dc5d9759063a4eccacdcaeb2b3ac3e157584e63f (patch) | |
tree | f89bf1b46738b9bf06211c1ca735bb68f1729538 | |
parent | d5d4df98bb9e0c836cb5b229b3f186637cde7673 (diff) | |
download | bcm5719-llvm-dc5d9759063a4eccacdcaeb2b3ac3e157584e63f.tar.gz bcm5719-llvm-dc5d9759063a4eccacdcaeb2b3ac3e157584e63f.zip |
Fix and test for assertion error in P41835.
llvm-svn: 360448
-rw-r--r-- | clang/lib/AST/ASTContext.cpp | 6 | ||||
-rw-r--r-- | clang/test/Frontend/macro_defined_type.cpp | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 1b9b7cd1b51..a2de53ca0c1 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -2758,6 +2758,12 @@ QualType ASTContext::getFunctionTypeWithExceptionSpec( return getParenType( getFunctionTypeWithExceptionSpec(PT->getInnerType(), ESI)); + // Might be wrapped in a macro qualified type. + if (const auto *MQT = dyn_cast<MacroQualifiedType>(Orig)) + return getMacroQualifiedType( + getFunctionTypeWithExceptionSpec(MQT->getUnderlyingType(), ESI), + MQT->getMacroIdentifier()); + // Might have a calling-convention attribute. if (const auto *AT = dyn_cast<AttributedType>(Orig)) return getAttributedType( diff --git a/clang/test/Frontend/macro_defined_type.cpp b/clang/test/Frontend/macro_defined_type.cpp index 4e60c840382..63495268687 100644 --- a/clang/test/Frontend/macro_defined_type.cpp +++ b/clang/test/Frontend/macro_defined_type.cpp @@ -13,3 +13,9 @@ void Func() { auto NODEREF *auto_i_ptr2 = i_ptr; auto NODEREF auto_i2 = i; // expected-warning{{'noderef' can only be used on an array or pointer type}} } + +// Added test for fix for P41835 +#define _LIBCPP_FLOAT_ABI __attribute__((pcs("aapcs"))) +struct A { + _LIBCPP_FLOAT_ABI int operator()() throw(); // expected-warning{{'pcs' calling convention ignored for this target}} +}; |