diff options
-rw-r--r-- | clang/lib/Sema/SemaTemplateVariadic.cpp | 10 | ||||
-rw-r--r-- | clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp | 4 |
2 files changed, 9 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaTemplateVariadic.cpp b/clang/lib/Sema/SemaTemplateVariadic.cpp index f5883e429db..e4fab71d995 100644 --- a/clang/lib/Sema/SemaTemplateVariadic.cpp +++ b/clang/lib/Sema/SemaTemplateVariadic.cpp @@ -782,11 +782,11 @@ bool Sema::containsUnexpandedParameterPacks(Declarator &D) { Chunk.Fun.NoexceptExpr->containsUnexpandedParameterPack()) return true; - if (Chunk.Fun.hasTrailingReturnType() && - Chunk.Fun.getTrailingReturnType() - .get() - ->containsUnexpandedParameterPack()) - return true; + if (Chunk.Fun.hasTrailingReturnType()) { + QualType T = Chunk.Fun.getTrailingReturnType().get(); + if (!T.isNull() && T->containsUnexpandedParameterPack()) + return true; + } break; case DeclaratorChunk::MemberPointer: diff --git a/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp b/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp index 93c246bdd79..de1c5a708db 100644 --- a/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp +++ b/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp @@ -68,6 +68,10 @@ void ci(int ... []); // expected-error{{type 'int []' of function parameter pack void di(int ... x[]); // expected-error{{type 'int []' of function parameter pack does not contain any unexpanded parameter packs}} } +void f5a(auto fp(int)->unk ...) {} // expected-error{{unknown type name 'unk'}} +void f5b(auto fp(int)->auto ...) {} // expected-error{{'auto' not allowed in function return type}} +void f5c(auto fp()->...) {} // expected-error{{expected a type}} + // FIXME: Expand for function and member pointer types. |