Skip to content

Commit 2bc46ae

Browse files
authored
[clang] Format "array is too large" diagnostics with separators (#160260)
We only display this diagnostic with large numbers, so add the separators. Not sure if `295'147'905'179'352'825'841` is much better than `295147905179352825841` but I think it would be nice to have separators in more diagnostics.
1 parent 32ff987 commit 2bc46ae

File tree

5 files changed

+15
-7
lines changed

5 files changed

+15
-7
lines changed

clang/lib/Sema/SemaDecl.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6794,7 +6794,9 @@ bool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo,
67946794
if (SizeIsNegative)
67956795
Diag(Loc, diag::err_typecheck_negative_array_size);
67966796
else if (Oversized.getBoolValue())
6797-
Diag(Loc, diag::err_array_too_large) << toString(Oversized, 10);
6797+
Diag(Loc, diag::err_array_too_large) << toString(
6798+
Oversized, 10, Oversized.isSigned(), /*formatAsCLiteral=*/false,
6799+
/*UpperCase=*/false, /*InsertSeparators=*/true);
67986800
else if (FailedFoldDiagID)
67996801
Diag(Loc, FailedFoldDiagID);
68006802
return false;

clang/lib/Sema/SemaExprCXX.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2395,7 +2395,10 @@ ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
23952395
if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context))
23962396
return ExprError(
23972397
Diag((*ArraySize)->getBeginLoc(), diag::err_array_too_large)
2398-
<< toString(*Value, 10) << (*ArraySize)->getSourceRange());
2398+
<< toString(*Value, 10, Value->isSigned(),
2399+
/*formatAsCLiteral=*/false, /*UpperCase=*/false,
2400+
/*InsertSeparators=*/true)
2401+
<< (*ArraySize)->getSourceRange());
23992402
}
24002403

24012404
KnownArraySize = Value->getZExtValue();

clang/lib/Sema/SemaType.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2270,7 +2270,10 @@ QualType Sema::BuildArrayType(QualType T, ArraySizeModifier ASM,
22702270
: ConstVal.getActiveBits();
22712271
if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
22722272
Diag(ArraySize->getBeginLoc(), diag::err_array_too_large)
2273-
<< toString(ConstVal, 10) << ArraySize->getSourceRange();
2273+
<< toString(ConstVal, 10, ConstVal.isSigned(),
2274+
/*formatAsCLiteral=*/false, /*UpperCase=*/false,
2275+
/*InsertSeparators=*/true)
2276+
<< ArraySize->getSourceRange();
22742277
return QualType();
22752278
}
22762279

clang/test/C/C23/n2838.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* Types and sizes
55
*/
66

7-
char buffer4[0xFFFF'FFFF'FFFF'FFFF'1wb]; /* expected-error {{array is too large (295147905179352825841 elements)}} */
8-
char buffer3[0xFFFF'FFFF'FFFF'FFFFwb]; /* expected-error {{array is too large (18446744073709551615 elements)}} */
9-
char buffer2[0x7FFF'FFFF'FFFF'FFFFwb]; /* expected-error {{array is too large (9223372036854775807 elements)}} */
7+
char buffer4[0xFFFF'FFFF'FFFF'FFFF'1wb]; /* expected-error {{array is too large (295'147'905'179'352'825'841 elements)}} */
8+
char buffer3[0xFFFF'FFFF'FFFF'FFFFwb]; /* expected-error {{array is too large (18'446'744'073'709'551'615 elements)}} */
9+
char buffer2[0x7FFF'FFFF'FFFF'FFFFwb]; /* expected-error {{array is too large (9'223'372'036'854'775'807 elements)}} */
1010
char buffer1[0x1FFF'FFFF'FFFF'FFFFwb]; /* array is juuuuuust right */
1111

1212
/* The largest object we can create is still smaller than SIZE_MAX. */

clang/test/C/drs/dr2xx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ void dr266(void) {
370370
*/
371371
#pragma clang diagnostic push
372372
#pragma clang diagnostic ignored "-Wlong-long"
373-
(void)sizeof(int[__SIZE_MAX__ / 2][__SIZE_MAX__ / 2]); /* expected-error-re 2 {{array is too large ({{[0-9]+}} elements)}} */
373+
(void)sizeof(int[__SIZE_MAX__ / 2][__SIZE_MAX__ / 2]); /* expected-error-re 2 {{array is too large ({{[0-9']+}} elements)}} */
374374
#pragma clang diagnostic pop
375375
}
376376

0 commit comments

Comments
 (0)