llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Timm Baeder (tbaederr) <details> <summary>Changes</summary> The callee is null, not the full call expression. --- Full diff: https://github.com/llvm/llvm-project/pull/104426.diff 2 Files Affected: - (modified) clang/lib/AST/Interp/Interp.h (+2-2) - (modified) clang/test/AST/Interp/functions.cpp (+11) ``````````diff diff --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h index 3eab0cfd871385..7dbda9ae65fe78 100644 --- a/clang/lib/AST/Interp/Interp.h +++ b/clang/lib/AST/Interp/Interp.h @@ -2702,9 +2702,9 @@ inline bool CallPtr(InterpState &S, CodePtr OpPC, uint32_t ArgSize, const Function *F = FuncPtr.getFunction(); if (!F) { - const Expr *E = S.Current->getExpr(OpPC); + const CallExpr *E = cast<CallExpr>(S.Current->getExpr(OpPC)); S.FFDiag(E, diag::note_constexpr_null_callee) - << const_cast<Expr *>(E) << E->getSourceRange(); + << const_cast<Expr *>(E->getCallee()) << E->getSourceRange(); return false; } diff --git a/clang/test/AST/Interp/functions.cpp b/clang/test/AST/Interp/functions.cpp index f190262ad3ebee..b00f59a8d8d433 100644 --- a/clang/test/AST/Interp/functions.cpp +++ b/clang/test/AST/Interp/functions.cpp @@ -221,6 +221,17 @@ namespace Comparison { static_assert(pg == &g, ""); } + constexpr int Double(int n) { return 2 * n; } + constexpr int Triple(int n) { return 3 * n; } + constexpr int Twice(int (*F)(int), int n) { return F(F(n)); } + constexpr int Quadruple(int n) { return Twice(Double, n); } + constexpr auto Select(int n) -> int (*)(int) { + return n == 2 ? &Double : n == 3 ? &Triple : n == 4 ? &Quadruple : 0; + } + constexpr int Apply(int (*F)(int), int n) { return F(n); } // both-note {{'F' evaluates to a null function pointer}} + + constexpr int Invalid = Apply(Select(0), 0); // both-error {{must be initialized by a constant expression}} \ + // both-note {{in call to 'Apply(nullptr, 0)'}} } struct F { `````````` </details> https://github.com/llvm/llvm-project/pull/104426 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits