[clang] [clang][bytecode] Diagnose failed constexpr assertions differently (PR #140000)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Wed May 14 21:16:38 PDT 2025
https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/140000
Adjust to the new way the ast walker is doing it.
>From 91b2beec47f191dc33714b82363a5b6ebe68eef3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Thu, 15 May 2025 06:13:12 +0200
Subject: [PATCH] [clang][bytecode] Diagnose failed constexpr assertions
differently
Adjust to the new way the ast walker is doing it.
---
clang/lib/AST/ByteCode/Interp.cpp | 13 +++++++++++++
clang/test/SemaCXX/consteval-assert.cpp | 10 +++++++---
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/clang/lib/AST/ByteCode/Interp.cpp b/clang/lib/AST/ByteCode/Interp.cpp
index bc860185fea21..ab4bd96b4f993 100644
--- a/clang/lib/AST/ByteCode/Interp.cpp
+++ b/clang/lib/AST/ByteCode/Interp.cpp
@@ -851,6 +851,19 @@ bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {
if (F->isLambdaStaticInvoker())
return true;
+ // Diagnose failed assertions specially.
+ if (S.Current->getLocation(OpPC).isMacroID() &&
+ F->getDecl()->getIdentifier()) {
+ StringRef Name = F->getDecl()->getName();
+ bool AssertFailed =
+ Name == "__assert_rtn" || Name == "__assert_fail" || Name == "_wassert";
+ if (AssertFailed) {
+ S.FFDiag(S.Current->getLocation(OpPC),
+ diag::note_constexpr_assert_failed);
+ return false;
+ }
+ }
+
if (S.getLangOpts().CPlusPlus11) {
const FunctionDecl *DiagDecl = F->getDecl();
diff --git a/clang/test/SemaCXX/consteval-assert.cpp b/clang/test/SemaCXX/consteval-assert.cpp
index b54a38ff26105..8f0b9046518ee 100644
--- a/clang/test/SemaCXX/consteval-assert.cpp
+++ b/clang/test/SemaCXX/consteval-assert.cpp
@@ -1,6 +1,10 @@
-// RUN: %clang_cc1 -std=c++23 -verify=expected,cxx20_plus -DTEST_LINUX %s
-// RUN: %clang_cc1 -std=c++23 -verify=expected,cxx20_plus -DTEST_WINDOWS %s
-// RUN: %clang_cc1 -std=c++23 -verify=expected,cxx20_plus -DTEST_DARWIN %s
+// RUN: %clang_cc1 -std=c++23 -verify -DTEST_LINUX %s
+// RUN: %clang_cc1 -std=c++23 -verify -DTEST_WINDOWS %s
+// RUN: %clang_cc1 -std=c++23 -verify -DTEST_DARWIN %s
+
+// RUN: %clang_cc1 -std=c++23 -verify -DTEST_LINUX %s -fexperimental-new-constant-interpreter
+// RUN: %clang_cc1 -std=c++23 -verify -DTEST_WINDOWS %s -fexperimental-new-constant-interpreter
+// RUN: %clang_cc1 -std=c++23 -verify -DTEST_DARWIN %s -fexperimental-new-constant-interpreter
#ifdef __ASSERT_FUNCTION
#undef __ASSERT_FUNCTION
More information about the cfe-commits
mailing list