Skip to content

Commit 07a6347

Browse files
committed
[clang][clang-scan-deps] Add LangOptions::AllowLiteralDigitSeparator and enable it by default for CPlusPlus14 or C23 and set it explicitly by Scanner
1 parent d5a1593 commit 07a6347

File tree

5 files changed

+7
-3
lines changed

5 files changed

+7
-3
lines changed

clang/include/clang/Basic/LangOptions.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ LANGOPT(CXXAssumptions, 1, 1, NotCompatible, "Enable or disable codegen and comp
438438

439439
LANGOPT(RawStringLiterals, 1, 1, NotCompatible, "Enable or disable raw string literals")
440440

441-
LANGOPT(ScanDeps, 1, 0, NotCompatible, "True if we are scanning by DependencyDirectivesScanner")
441+
LANGOPT(AllowLiteralDigitSeparator, 1, 0, NotCompatible, "Allow literal digit seperator in source")
442442

443443
ENUM_LANGOPT(StrictFlexArraysLevel, StrictFlexArraysLevelKind, 2,
444444
StrictFlexArraysLevelKind::Default, NotCompatible,

clang/include/clang/Basic/LangStandard.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ struct LangStandard {
140140
return isCPlusPlus11() || (!isCPlusPlus() && isC99() && isGNUMode());
141141
}
142142

143+
/// allowLiteralDigitSeparator - Language supports literal digit seperator
144+
bool allowLiteralDigitSeparator() const { return isCPlusPlus14() || isC23(); }
145+
143146
/// isGNUMode - Language includes GNU extensions.
144147
bool isGNUMode() const { return Flags & GNUMode; }
145148

clang/lib/Basic/LangOptions.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ void LangOptions::setLangDefaults(LangOptions &Opts, Language Lang,
128128
Opts.WChar = Std.isCPlusPlus();
129129
Opts.Digraphs = Std.hasDigraphs();
130130
Opts.RawStringLiterals = Std.hasRawStringLiterals();
131+
Opts.AllowLiteralDigitSeparator = Std.allowLiteralDigitSeparator();
131132
Opts.NamedLoops = Std.isC2y();
132133

133134
Opts.HLSL = Lang == Language::HLSL;

clang/lib/Lex/DependencyDirectivesScanner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ struct Scanner {
7474
LangOpts.ObjC = true;
7575
LangOpts.LineComment = true;
7676
LangOpts.RawStringLiterals = true;
77-
LangOpts.ScanDeps = true;
77+
LangOpts.AllowLiteralDigitSeparator = true;
7878
// FIXME: we do not enable C11 or C++11, so we are missing u/u8/U"".
7979
return LangOpts;
8080
}

clang/lib/Lex/Lexer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2087,7 +2087,7 @@ bool Lexer::LexNumericConstant(Token &Result, const char *CurPtr) {
20872087
}
20882088

20892089
// If we have a digit separator, continue.
2090-
if (C == '\'' && (LangOpts.CPlusPlus14 || LangOpts.C23 || LangOpts.ScanDeps)) {
2090+
if (C == '\'' && LangOpts.AllowLiteralDigitSeparator) {
20912091
auto [Next, NextSize] = getCharAndSizeNoWarn(CurPtr + Size, LangOpts);
20922092
if (isAsciiIdentifierContinue(Next)) {
20932093
if (!isLexingRawMode())

0 commit comments

Comments
 (0)