https://github.com/TPPPP72 updated https://github.com/llvm/llvm-project/pull/212743
>From 2f8f2e058cc9418679e50f207e47b3c1734b9500 Mon Sep 17 00:00:00 2001 From: Shengxin Pei <[email protected]> Date: Thu, 30 Jul 2026 02:40:36 +0800 Subject: [PATCH 1/5] [Clang] Fixed an assertion caused by Microsoft integer literals exceeding the maximum value --- clang/docs/ReleaseNotes.md | 1 + clang/lib/Sema/SemaExpr.cpp | 3 ++- clang/test/SemaCXX/ms_integer_suffix.cpp | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md index 0e40754efd30e..c37ab540a4702 100644 --- a/clang/docs/ReleaseNotes.md +++ b/clang/docs/ReleaseNotes.md @@ -410,6 +410,7 @@ features cannot lower the translation-unit ABI level; - Fixed a bug where `__func__`, `__PRETTY_FUNCTION__` and `__FUNCTION__` were not resolving to the proper function when inside a lambda return type (#GH211811) - Fixed USR generation for declarations whose signature mentions a class-type non-type template parameter. (#GH212351) +- Fixed an assertion caused by Microsoft integer literals exceeding the maximum value. (#GH212504) - Fixed a crash when checking scalar type with excess braces. (#GH69213), (#GH137845), (#GH198767), (#GH207566), (#GH106180) - Fixed an assertion crash when instantiating a nested requirement with an invalid constraint. (#GH213575) - Clang now defines the GCC-compatible predefined macro `__SIG_ATOMIC_TYPE__`. (#GH213895) diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 0908841dca8bf..f55374b5f255f 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -4092,7 +4092,7 @@ ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) { !Context.getTargetInfo().hasInt128Type()) PP.Diag(Tok.getLocation(), diag::err_integer_literal_too_large) << Literal.isUnsigned; - BitsNeeded = Literal.MicrosoftInteger; + BitsNeeded = std::max<unsigned>(BitsNeeded, Literal.MicrosoftInteger); } llvm::APInt ResultVal(BitsNeeded, 0); @@ -4134,6 +4134,7 @@ ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) { Ty = Context.getIntTypeForBitwidth(Width, /*Signed=*/!Literal.isUnsigned); } + ResultVal = ResultVal.zextOrTrunc(Width); } // Bit-precise integer literals are automagically-sized based on the diff --git a/clang/test/SemaCXX/ms_integer_suffix.cpp b/clang/test/SemaCXX/ms_integer_suffix.cpp index aa2f13099d3b8..41feda129668b 100644 --- a/clang/test/SemaCXX/ms_integer_suffix.cpp +++ b/clang/test/SemaCXX/ms_integer_suffix.cpp @@ -18,3 +18,7 @@ static_assert(sizeof(0i32) == __SIZEOF_INT32__, ""); #ifdef __SIZEOF_INT64__ static_assert(sizeof(0i64) == __SIZEOF_INT64__, ""); #endif + +namespace gh212504 { + static_assert(1234i8, ""); +} >From a524d77741186b43495f2d73e7ce570fa74dbab1 Mon Sep 17 00:00:00 2001 From: Shengxin Pei <[email protected]> Date: Thu, 30 Jul 2026 03:22:46 +0800 Subject: [PATCH 2/5] update test case --- clang/test/SemaCXX/ms_integer_suffix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/SemaCXX/ms_integer_suffix.cpp b/clang/test/SemaCXX/ms_integer_suffix.cpp index 41feda129668b..288ad3cb2eb0f 100644 --- a/clang/test/SemaCXX/ms_integer_suffix.cpp +++ b/clang/test/SemaCXX/ms_integer_suffix.cpp @@ -20,5 +20,5 @@ static_assert(sizeof(0i64) == __SIZEOF_INT64__, ""); #endif namespace gh212504 { - static_assert(1234i8, ""); + static_assert(1234i8 == -46, ""); } >From 3575612c74e757f501d1be675638c18491de9629 Mon Sep 17 00:00:00 2001 From: Shengxin Pei <[email protected]> Date: Mon, 10 Aug 2026 05:15:48 +0800 Subject: [PATCH 3/5] update test --- clang/test/SemaCXX/ms_integer_suffix.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/clang/test/SemaCXX/ms_integer_suffix.cpp b/clang/test/SemaCXX/ms_integer_suffix.cpp index 288ad3cb2eb0f..71c9875ccfd58 100644 --- a/clang/test/SemaCXX/ms_integer_suffix.cpp +++ b/clang/test/SemaCXX/ms_integer_suffix.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fms-extensions -verify %s -// expected-no-diagnostics +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fms-extensions -verify=signed,expected %s +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fms-extensions -fno-signed-char -verify=unsigned,expected %s #ifdef __SIZEOF_INT8__ static_assert(sizeof(0i8) == __SIZEOF_INT8__, ""); @@ -20,5 +20,9 @@ static_assert(sizeof(0i64) == __SIZEOF_INT64__, ""); #endif namespace gh212504 { - static_assert(1234i8 == -46, ""); + static_assert(1234i8 == -46, ""); // unsigned-error {{static assertion failed due to requirement '210i8 == -46':}} + static_assert(1234i8 == 210, ""); // signed-error {{static assertion failed due to requirement '-46i8 == 210':}} + static_assert(1234ui8 == 210, ""); + static_assert(18446744073709551615i8, ""); + static_assert(18446744073709551616i8 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} } >From 99cd8f3a0ba6b2b6362c181a99461683fc63ca40 Mon Sep 17 00:00:00 2001 From: Shengxin Pei <[email protected]> Date: Mon, 10 Aug 2026 12:18:29 +0800 Subject: [PATCH 4/5] add tests for other ms_suffix --- clang/test/SemaCXX/ms_integer_suffix.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/clang/test/SemaCXX/ms_integer_suffix.cpp b/clang/test/SemaCXX/ms_integer_suffix.cpp index 71c9875ccfd58..67f6ec2b02c2e 100644 --- a/clang/test/SemaCXX/ms_integer_suffix.cpp +++ b/clang/test/SemaCXX/ms_integer_suffix.cpp @@ -23,6 +23,12 @@ namespace gh212504 { static_assert(1234i8 == -46, ""); // unsigned-error {{static assertion failed due to requirement '210i8 == -46':}} static_assert(1234i8 == 210, ""); // signed-error {{static assertion failed due to requirement '-46i8 == 210':}} static_assert(1234ui8 == 210, ""); + static_assert(123456i16 == -7616, ""); + static_assert(123456ui16 == 57920, ""); + static_assert(12345678901i32 == -539222987, ""); + static_assert(12345678901ui32 == 3755744309, ""); static_assert(18446744073709551615i8, ""); static_assert(18446744073709551616i8 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} + static_assert(18446744073709551615ui32, ""); + static_assert(18446744073709551616ui32 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} } >From d2b4d0234f54ad173b729fa90c2eaee8cb36c490 Mon Sep 17 00:00:00 2001 From: Shengxin Pei <[email protected]> Date: Tue, 18 Aug 2026 13:49:53 +0800 Subject: [PATCH 5/5] Update clang/test/SemaCXX/ms_integer_suffix.cpp Co-authored-by: A. Jiang <[email protected]> --- clang/test/SemaCXX/ms_integer_suffix.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/test/SemaCXX/ms_integer_suffix.cpp b/clang/test/SemaCXX/ms_integer_suffix.cpp index 67f6ec2b02c2e..d36a560246a04 100644 --- a/clang/test/SemaCXX/ms_integer_suffix.cpp +++ b/clang/test/SemaCXX/ms_integer_suffix.cpp @@ -28,7 +28,14 @@ namespace gh212504 { static_assert(12345678901i32 == -539222987, ""); static_assert(12345678901ui32 == 3755744309, ""); static_assert(18446744073709551615i8, ""); - static_assert(18446744073709551616i8 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} static_assert(18446744073709551615ui32, ""); + + static_assert(18446744073709551616i8 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} + static_assert(18446744073709551616i16 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} + static_assert(18446744073709551616i32 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} + static_assert(18446744073709551616i64 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} + static_assert(18446744073709551616ui8 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} + static_assert(18446744073709551616ui16 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} static_assert(18446744073709551616ui32 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} + static_assert(18446744073709551616ui64 == 0, ""); // expected-error {{integer literal is too large to be represented in any integer type}} } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
