https://github.com/maramatias updated https://github.com/llvm/llvm-project/pull/145053
>From 119a156c668c03f048399ec20f3bcf8fc0d2fdc5 Mon Sep 17 00:00:00 2001 From: Mara Matias <mara.mati...@gmail.com> Date: Wed, 18 Jun 2025 09:06:10 -0700 Subject: [PATCH 1/2] draft unittest not ready --- clang/docs/ReleaseNotes.rst | 4 ++++ clang/lib/Sema/SemaDeclCXX.cpp | 10 +++++++++- clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp | 5 +++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 96477ef6ddc9af..5a3e234ea1bcd6 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -642,6 +642,10 @@ Improvements to Clang's diagnostics #GH69470, #GH59391, #GH58172, #GH46215, #GH45915, #GH45891, #GH44490, #GH36703, #GH32903, #GH23312, #GH69874. +- Improved the performance of static assertions envolving large integers by + using hex format instead of string. + + Fixes #GH71675 Improvements to Clang's time-trace ---------------------------------- diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 16645ecf411e56..0e053671836c89 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -47,6 +47,7 @@ #include "clang/Sema/SemaOpenMP.h" #include "clang/Sema/Template.h" #include "clang/Sema/TemplateDeduction.h" +#include "llvm/ADT/APSInt.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" @@ -17575,7 +17576,14 @@ static bool ConvertAPValueToString(const APValue &V, QualType T, break; } } - V.getInt().toString(Str); + + llvm::APSInt vInt = V.getInt(); + if (vInt > std::numeric_limits<uint64_t>::max() || + vInt < std::numeric_limits<int64_t>::min()) { + vInt.toString(Str,16); + } else { + vInt.toString(Str); + } } break; diff --git a/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp b/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp index c7596218db5379..14a4d024b8aa80 100644 --- a/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp +++ b/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp @@ -35,6 +35,11 @@ struct S { void member() requires(sizeof(T) > 1); }; +namespace GH71675 { + constexpr unsigned _BitInt(__BITINT_MAXWIDTH__ >> 6) F = ~0; + static_assert(F == 1); // no-error +} + template<typename T> void ContainingFunction() { // expected-error@+1 {{non-templated function cannot have a requires clause}} >From db0a3bdea16e2dee834bd4715aa8a36b1e1d53ae Mon Sep 17 00:00:00 2001 From: Mara Matias <mara.mati...@gmail.com> Date: Fri, 20 Jun 2025 13:13:28 -0700 Subject: [PATCH 2/2] fixup! draft unittest not ready --- clang/lib/Sema/SemaDeclCXX.cpp | 2 +- clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp | 5 ----- clang/test/SemaCXX/static-assert.cpp | 6 ++++++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 0e053671836c89..cd12b0702135b5 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -17578,7 +17578,7 @@ static bool ConvertAPValueToString(const APValue &V, QualType T, } llvm::APSInt vInt = V.getInt(); - if (vInt > std::numeric_limits<uint64_t>::max() || + if (vInt > std::numeric_limits<int64_t>::max() || vInt < std::numeric_limits<int64_t>::min()) { vInt.toString(Str,16); } else { diff --git a/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp b/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp index 14a4d024b8aa80..c7596218db5379 100644 --- a/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp +++ b/clang/test/CXX/dcl.decl/dcl.decl.general/p4-20.cpp @@ -35,11 +35,6 @@ struct S { void member() requires(sizeof(T) > 1); }; -namespace GH71675 { - constexpr unsigned _BitInt(__BITINT_MAXWIDTH__ >> 6) F = ~0; - static_assert(F == 1); // no-error -} - template<typename T> void ContainingFunction() { // expected-error@+1 {{non-templated function cannot have a requires clause}} diff --git a/clang/test/SemaCXX/static-assert.cpp b/clang/test/SemaCXX/static-assert.cpp index bf6a2eeb432a3d..762cf3e6ccb516 100644 --- a/clang/test/SemaCXX/static-assert.cpp +++ b/clang/test/SemaCXX/static-assert.cpp @@ -255,6 +255,12 @@ int f() { } } +namespace GH71675 { + constexpr unsigned _BitInt(__BITINT_MAXWIDTH__ >> 6) F = ~0; + static_assert(F == 1); // expected-error {{static assertion failed due to requirement 'F == 1'}} + // expected-note {{expression evaluates to 'F'}} +} + namespace Diagnostics { /// No notes for literals. static_assert(false, ""); // expected-error {{failed}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits