https://github.com/tbaederr updated https://github.com/llvm/llvm-project/pull/104426
>From d81f019bd9b64bcff46a939528ce05ddf4bb31f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com> Date: Thu, 15 Aug 2024 12:06:57 +0200 Subject: [PATCH] [clang][Interp] Pass callee decl to null_callee diagnostics The callee is null, not the full call expression. --- clang/lib/AST/Interp/Interp.h | 4 ++-- clang/test/AST/Interp/functions.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h index 3eab0cfd871385..c2d73f32f0b20c 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 auto *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 { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits