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}} + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits