https://github.com/tbaederr created 
https://github.com/llvm/llvm-project/pull/208679

Let the declared_at note point to the declaration in that case.

>From 79454ebee61c23843879489e12168b3c9debb1bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <[email protected]>
Date: Fri, 10 Jul 2026 11:52:59 +0200
Subject: [PATCH] [clang][bytecode] Don't diagnose definition wihout body

Let the declared_at note point to the declaration in that case.
---
 clang/lib/AST/ByteCode/Interp.cpp   | 6 ++++--
 clang/test/AST/ByteCode/invalid.cpp | 9 +++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/clang/lib/AST/ByteCode/Interp.cpp 
b/clang/lib/AST/ByteCode/Interp.cpp
index b2af27fc88542..0adcdfe6e78c9 100644
--- a/clang/lib/AST/ByteCode/Interp.cpp
+++ b/clang/lib/AST/ByteCode/Interp.cpp
@@ -1110,8 +1110,10 @@ static bool diagnoseCallableDecl(InterpState &S, CodePtr 
OpPC,
              diag::note_constexpr_invalid_function, 1)
         << DiagDecl->isConstexpr() << (bool)CD << DiagDecl;
 
-    if (DiagDecl->getDefinition())
-      S.Note(DiagDecl->getDefinition()->getLocation(), diag::note_declared_at);
+    const FunctionDecl *Definition;
+    const Stmt *Body = DiagDecl->getBody(Definition);
+    if (Body && Definition)
+      S.Note(Definition->getLocation(), diag::note_declared_at);
     else
       S.Note(DiagDecl->getLocation(), diag::note_declared_at);
   }
diff --git a/clang/test/AST/ByteCode/invalid.cpp 
b/clang/test/AST/ByteCode/invalid.cpp
index e79b698a32719..930565181b202 100644
--- a/clang/test/AST/ByteCode/invalid.cpp
+++ b/clang/test/AST/ByteCode/invalid.cpp
@@ -218,3 +218,12 @@ namespace InvalidVirtualCast {
   static_assert((X *)(Y *)&z, ""); // both-error {{not an integral constant 
expression}} \
                                    // both-note {{cast that performs the 
conversions of a reinterpret_cast is not allowed in a constant expression}}
 }
+
+namespace DefinitionInBody {
+  int foo(); // both-note {{declared here}}
+  int foo() {
+    static_assert(foo() == 1); // both-error {{not an integral constant 
expression}} \
+                               // both-note {{non-constexpr function 'foo' 
cannot be used in a constant expression}}
+    return 5;
+  }
+}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to