This revision was not accepted when it landed; it landed in state "Needs Review". This revision was automatically updated to reflect the committed changes. Closed by commit rC353931: Look through typedefs in getFunctionTypeWithExceptionSpec (authored by sberg, committed by ).
Changed prior to commit: https://reviews.llvm.org/D58056?vs=186269&id=186604#toc Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58056/new/ https://reviews.llvm.org/D58056 Files: lib/AST/ASTContext.cpp test/AST/function-alias.cpp Index: lib/AST/ASTContext.cpp =================================================================== --- lib/AST/ASTContext.cpp +++ lib/AST/ASTContext.cpp @@ -2771,7 +2771,7 @@ // Anything else must be a function type. Rebuild it with the new exception // specification. - const auto *Proto = cast<FunctionProtoType>(Orig); + const auto *Proto = Orig->getAs<FunctionProtoType>(); return getFunctionType( Proto->getReturnType(), Proto->getParamTypes(), Proto->getExtProtoInfo().withExceptionSpec(ESI)); Index: test/AST/function-alias.cpp =================================================================== --- test/AST/function-alias.cpp +++ test/AST/function-alias.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -std=c++17 -fsyntax-only %s + +// Verify that ASTContext::getFunctionTypeWithExceptionSpec (called through +// ASTContext::hasSameFunctionTypeIgnoringExceptionSpec from +// ExprEvaluatorBase::handleCallExpr in lib/AST/ExprConstant.cpp) does not crash +// for a type alias. + +constexpr int f() noexcept { return 0; } + +using F = int(); + +constexpr int g(F * p) { return p(); } + +constexpr int n = g(f);
Index: lib/AST/ASTContext.cpp =================================================================== --- lib/AST/ASTContext.cpp +++ lib/AST/ASTContext.cpp @@ -2771,7 +2771,7 @@ // Anything else must be a function type. Rebuild it with the new exception // specification. - const auto *Proto = cast<FunctionProtoType>(Orig); + const auto *Proto = Orig->getAs<FunctionProtoType>(); return getFunctionType( Proto->getReturnType(), Proto->getParamTypes(), Proto->getExtProtoInfo().withExceptionSpec(ESI)); Index: test/AST/function-alias.cpp =================================================================== --- test/AST/function-alias.cpp +++ test/AST/function-alias.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -std=c++17 -fsyntax-only %s + +// Verify that ASTContext::getFunctionTypeWithExceptionSpec (called through +// ASTContext::hasSameFunctionTypeIgnoringExceptionSpec from +// ExprEvaluatorBase::handleCallExpr in lib/AST/ExprConstant.cpp) does not crash +// for a type alias. + +constexpr int f() noexcept { return 0; } + +using F = int(); + +constexpr int g(F * p) { return p(); } + +constexpr int n = g(f);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits