[clang] f7a3a5c - [clang] Add regression tests for narrowing with is_constant_evaluated. (#142885)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 5 09:45:07 PDT 2025
Author: Eli Friedman
Date: 2025-06-05T09:45:03-07:00
New Revision: f7a3a5c5dc000baa448f1bc6df65601ad91782dd
URL: https://github.com/llvm/llvm-project/commit/f7a3a5c5dc000baa448f1bc6df65601ad91782dd
DIFF: https://github.com/llvm/llvm-project/commit/f7a3a5c5dc000baa448f1bc6df65601ad91782dd.diff
LOG: [clang] Add regression tests for narrowing with is_constant_evaluated. (#142885)
As discussed in #142707, in the context of determining whether a
conversion is a narrowing conversion, is_constant_evaluation should be
false, even it's a subexpression of a manifestly constant-evaluated
expression.
Added:
Modified:
clang/test/SemaCXX/builtin-is-constant-evaluated.cpp
Removed:
################################################################################
diff --git a/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp b/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp
index a1c003c85f732..c775fe71069df 100644
--- a/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp
+++ b/clang/test/SemaCXX/builtin-is-constant-evaluated.cpp
@@ -143,3 +143,14 @@ namespace fold_initializer {
const float A::f = __builtin_is_constant_evaluated();
static_assert(fold(A::f == 1.0f));
}
+
+namespace narrowing {
+ struct X { unsigned u; };
+ constexpr int f(X x) {return x.u;}
+ void g() {
+ static_assert(f({0xFFFFFFFFLL + __builtin_is_constant_evaluated()}) == 0);
+ f({0x100000000LL - __builtin_is_constant_evaluated()}); // expected-error {{constant expression evaluates to 4294967296}} \
+ // expected-warning {{implicit conversion}} \
+ // expected-note {{insert an explicit cast to silence this issue}}
+ }
+}
More information about the cfe-commits
mailing list