From 7e1c62fce3741b8182db2428c29136524b27b98c Mon Sep 17 00:00:00 2001 From: Alex Sepkowski <5620315+alsepkow@users.noreply.github.com> Date: Tue, 8 Jul 2025 16:17:56 -0700 Subject: [PATCH 1/7] Numeric limits in ExprConstant.cpp --- clang/lib/AST/ExprConstant.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 60c658a8d8f99..5d399a3c75ca8 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -1428,11 +1428,11 @@ namespace { } bool destroy(bool RunDestructors = true) { bool OK = cleanup(Info, RunDestructors, OldStackSize); - OldStackSize = -1U; + OldStackSize = std::numeric_limits::max(); return OK; } ~ScopeRAII() { - if (OldStackSize != -1U) + if (OldStackSize != std::numeric_limits::max()) destroy(false); // Body moved to a static method to encourage the compiler to inline away // instances of this class. From 98197ad801b0647e9b755212fe8b6f7648784ac4 Mon Sep 17 00:00:00 2001 From: Alex Sepkowski <5620315+alsepkow@users.noreply.github.com> Date: Tue, 8 Jul 2025 16:44:39 -0700 Subject: [PATCH 2/7] Numeric limits in Format.cpp --- clang/lib/Format/Format.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index f0412cddc6f19..a8c88c6412805 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -22,6 +22,8 @@ #include "UnwrappedLineFormatter.h" #include "UsingDeclarationsSorter.h" #include "clang/Tooling/Inclusions/HeaderIncludes.h" + +#include #include "llvm/ADT/Sequence.h" #define DEBUG_TYPE "format-formatter" @@ -777,7 +779,7 @@ template <> struct MappingTraits { IO.mapOptional("Maximum", signedMaximum); Space.Maximum = static_cast(signedMaximum); - if (Space.Maximum != -1u) + if (Space.Maximum != std::numeric_limits::max()) Space.Minimum = std::min(Space.Minimum, Space.Maximum); } }; @@ -1672,7 +1674,7 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) { LLVMStyle.SpacesBeforeTrailingComments = 1; LLVMStyle.SpacesInAngles = FormatStyle::SIAS_Never; LLVMStyle.SpacesInContainerLiterals = true; - LLVMStyle.SpacesInLineCommentPrefix = {/*Minimum=*/1, /*Maximum=*/-1u}; + LLVMStyle.SpacesInLineCommentPrefix = {/*Minimum=*/1, /*Maximum=*/std::numeric_limits::max()}; LLVMStyle.SpacesInParens = FormatStyle::SIPO_Never; LLVMStyle.SpacesInSquareBrackets = false; LLVMStyle.Standard = FormatStyle::LS_Latest; From a07376154afed4967c652469de3a4ec8ba2be980 Mon Sep 17 00:00:00 2001 From: Alex Sepkowski <5620315+alsepkow@users.noreply.github.com> Date: Tue, 8 Jul 2025 16:46:54 -0700 Subject: [PATCH 3/7] Numeric limits in Lexer.cpp --- clang/lib/Lex/Lexer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index 78988e928a689..1f695b4a8676c 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -3456,7 +3457,7 @@ std::optional Lexer::tryReadNumericUCN(const char *&StartPtr, } unsigned Value = llvm::hexDigitValue(C); - if (Value == -1U) { + if (Value == std::numeric_limits::max()) { if (!Delimited) break; if (Diagnose) From 2a479e17aced19aecdb9e0e8085857d060b7fbb2 Mon Sep 17 00:00:00 2001 From: Alex Sepkowski <5620315+alsepkow@users.noreply.github.com> Date: Tue, 8 Jul 2025 16:56:16 -0700 Subject: [PATCH 4/7] Numeric limits in SemaExpr.cpp --- clang/lib/Sema/SemaExpr.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 3c3d29c415249..2c721e9cf1bd7 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -18,6 +18,7 @@ #include "clang/AST/ASTDiagnostic.h" #include "clang/AST/ASTLambda.h" #include "clang/AST/ASTMutationListener.h" +#include #include "clang/AST/CXXInheritance.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclObjC.h" @@ -1906,7 +1907,7 @@ ExprResult Sema::CreateGenericSelectionExpr( } SmallVector CompatIndices; - unsigned DefaultIndex = -1U; + unsigned DefaultIndex = std::numeric_limits::max(); // Look at the canonical type of the controlling expression in case it was a // deduced type like __auto_type. However, when issuing diagnostics, use the // type the user wrote in source rather than the canonical one. @@ -1961,7 +1962,7 @@ ExprResult Sema::CreateGenericSelectionExpr( // C11 6.5.1.1p2 "If a generic selection has no default generic association, // its controlling expression shall have type compatible with exactly one of // the types named in its generic association list." - if (DefaultIndex == -1U && CompatIndices.size() == 0) { + if (DefaultIndex == std::numeric_limits::max() && CompatIndices.size() == 0) { auto P = GetControllingRangeAndType(ControllingExpr, ControllingType); SourceRange SR = P.first; Diag(SR.getBegin(), diag::err_generic_sel_no_match) << SR << P.second; From 46d148524cad5699fea71e9522469fac0e7603f5 Mon Sep 17 00:00:00 2001 From: Alex Sepkowski <5620315+alsepkow@users.noreply.github.com> Date: Tue, 8 Jul 2025 16:57:10 -0700 Subject: [PATCH 5/7] Clang-format previous changes --- clang/lib/Format/Format.cpp | 5 +++-- clang/lib/Sema/SemaExpr.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index a8c88c6412805..5f5a5d9d8a571 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -23,8 +23,8 @@ #include "UsingDeclarationsSorter.h" #include "clang/Tooling/Inclusions/HeaderIncludes.h" -#include #include "llvm/ADT/Sequence.h" +#include #define DEBUG_TYPE "format-formatter" @@ -1674,7 +1674,8 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) { LLVMStyle.SpacesBeforeTrailingComments = 1; LLVMStyle.SpacesInAngles = FormatStyle::SIAS_Never; LLVMStyle.SpacesInContainerLiterals = true; - LLVMStyle.SpacesInLineCommentPrefix = {/*Minimum=*/1, /*Maximum=*/std::numeric_limits::max()}; + LLVMStyle.SpacesInLineCommentPrefix = { + /*Minimum=*/1, /*Maximum=*/std::numeric_limits::max()}; LLVMStyle.SpacesInParens = FormatStyle::SIPO_Never; LLVMStyle.SpacesInSquareBrackets = false; LLVMStyle.Standard = FormatStyle::LS_Latest; diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 2c721e9cf1bd7..fcc015be1d5f4 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -18,7 +18,6 @@ #include "clang/AST/ASTDiagnostic.h" #include "clang/AST/ASTLambda.h" #include "clang/AST/ASTMutationListener.h" -#include #include "clang/AST/CXXInheritance.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclObjC.h" @@ -66,6 +65,7 @@ #include "llvm/Support/SaveAndRestore.h" #include "llvm/Support/TimeProfiler.h" #include "llvm/Support/TypeSize.h" +#include #include using namespace clang; @@ -1962,7 +1962,8 @@ ExprResult Sema::CreateGenericSelectionExpr( // C11 6.5.1.1p2 "If a generic selection has no default generic association, // its controlling expression shall have type compatible with exactly one of // the types named in its generic association list." - if (DefaultIndex == std::numeric_limits::max() && CompatIndices.size() == 0) { + if (DefaultIndex == std::numeric_limits::max() && + CompatIndices.size() == 0) { auto P = GetControllingRangeAndType(ControllingExpr, ControllingType); SourceRange SR = P.first; Diag(SR.getBegin(), diag::err_generic_sel_no_match) << SR << P.second; From 9aa8125a9f044a89902c16f95b318298738a934c Mon Sep 17 00:00:00 2001 From: Alex Sepkowski Date: Wed, 9 Jul 2025 10:28:20 -0700 Subject: [PATCH 6/7] Update clang/lib/Format/Format.cpp Swap to UINT_MAX to match formatting of the rest of the file. Co-authored-by: Owen Pan --- clang/lib/Format/Format.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 5f5a5d9d8a571..42b0d25dea145 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -779,7 +779,7 @@ template <> struct MappingTraits { IO.mapOptional("Maximum", signedMaximum); Space.Maximum = static_cast(signedMaximum); - if (Space.Maximum != std::numeric_limits::max()) + if (Space.Maximum < UINT_MAX) Space.Minimum = std::min(Space.Minimum, Space.Maximum); } }; From 013a5aa6772fd0c3edb26a61754fe719a4bacfd3 Mon Sep 17 00:00:00 2001 From: Alex Sepkowski <5620315+alsepkow@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:58:20 -0700 Subject: [PATCH 7/7] Update to use numeric_limits across Format.cpp instead of UINT_MAX --- clang/lib/Format/Format.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 42b0d25dea145..8b217bcbeece6 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -779,7 +779,7 @@ template <> struct MappingTraits { IO.mapOptional("Maximum", signedMaximum); Space.Maximum = static_cast(signedMaximum); - if (Space.Maximum < UINT_MAX) + if (Space.Maximum < std::numeric_limits::max()) Space.Minimum = std::min(Space.Minimum, Space.Maximum); } }; @@ -3171,11 +3171,12 @@ static bool affectsRange(ArrayRef Ranges, unsigned Start, // the index of the first of the duplicates as the others are going to be // removed. OffsetToEOL describes the cursor's position relative to the end of // its current line. -// If `Cursor` is not on any #include, `Index` will be UINT_MAX. +// If `Cursor` is not on any #include, `Index` will be +// std::numeric_limits::max(). static std::pair FindCursorIndex(const ArrayRef &Includes, const ArrayRef &Indices, unsigned Cursor) { - unsigned CursorIndex = UINT_MAX; + unsigned CursorIndex = std::numeric_limits::max(); unsigned OffsetToEOL = 0; for (int i = 0, e = Includes.size(); i != e; ++i) { unsigned Start = Includes[Indices[i]].Offset; @@ -3443,11 +3444,12 @@ tooling::Replacements sortCppIncludes(const FormatStyle &Style, StringRef Code, return Replaces; } -// Returns group number to use as a first order sort on imports. Gives UINT_MAX -// if the import does not match any given groups. +// Returns group number to use as a first order sort on imports. Gives +// std::numeric_limits::max() if the import does not match any given +// groups. static unsigned findJavaImportGroup(const FormatStyle &Style, StringRef ImportIdentifier) { - unsigned LongestMatchIndex = UINT_MAX; + unsigned LongestMatchIndex = std::numeric_limits::max(); unsigned LongestMatchLength = 0; for (unsigned I = 0; I < Style.JavaImportGroups.size(); I++) { const std::string &GroupPrefix = Style.JavaImportGroups[I]; @@ -3676,13 +3678,15 @@ formatReplacements(StringRef Code, const tooling::Replacements &Replaces, namespace { inline bool isHeaderInsertion(const tooling::Replacement &Replace) { - return Replace.getOffset() == UINT_MAX && Replace.getLength() == 0 && + return Replace.getOffset() == std::numeric_limits::max() && + Replace.getLength() == 0 && tooling::HeaderIncludes::IncludeRegex.match( Replace.getReplacementText()); } inline bool isHeaderDeletion(const tooling::Replacement &Replace) { - return Replace.getOffset() == UINT_MAX && Replace.getLength() == 1; + return Replace.getOffset() == std::numeric_limits::max() && + Replace.getLength() == 1; } // FIXME: insert empty lines between newly created blocks. @@ -3702,7 +3706,7 @@ fixCppIncludeInsertions(StringRef Code, const tooling::Replacements &Replaces, consumeError(HeaderInsertions.add(R)); } else if (isHeaderDeletion(R)) { HeadersToDelete.insert(R.getReplacementText()); - } else if (R.getOffset() == UINT_MAX) { + } else if (R.getOffset() == std::numeric_limits::max()) { llvm::errs() << "Insertions other than header #include insertion are " "not supported! " << R.getReplacementText() << "\n";