Skip to content

Commit a146505

Browse files
authored
[Sema] Clean up -Wc++11-narrowing-const-reference code after #76094. NFC (#77278)
1 parent 52ebf61 commit a146505

File tree

2 files changed

+27
-35
lines changed

2 files changed

+27
-35
lines changed

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6160,23 +6160,19 @@ def err_illegal_initializer_type : Error<"illegal initializer type %0">;
61606160
def ext_init_list_type_narrowing : ExtWarn<
61616161
"type %0 cannot be narrowed to %1 in initializer list">,
61626162
InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure;
6163-
// *_narrowing_const_reference diagnostics have the same messages, but are
6164-
// controlled by -Wc++11-narrowing-const-reference for narrowing involving a
6165-
// const reference.
61666163
def ext_init_list_type_narrowing_const_reference : ExtWarn<
6167-
"type %0 cannot be narrowed to %1 in initializer list">,
6164+
ext_init_list_type_narrowing.Summary>,
61686165
InGroup<CXX11NarrowingConstReference>, DefaultError, SFINAEFailure;
61696166
def ext_init_list_variable_narrowing : ExtWarn<
61706167
"non-constant-expression cannot be narrowed from type %0 to %1 in "
61716168
"initializer list">, InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure;
61726169
def ext_init_list_variable_narrowing_const_reference : ExtWarn<
6173-
"non-constant-expression cannot be narrowed from type %0 to %1 in "
6174-
"initializer list">, InGroup<CXX11NarrowingConstReference>, DefaultError, SFINAEFailure;
6170+
ext_init_list_variable_narrowing.Summary>, InGroup<CXX11NarrowingConstReference>, DefaultError, SFINAEFailure;
61756171
def ext_init_list_constant_narrowing : ExtWarn<
61766172
"constant expression evaluates to %0 which cannot be narrowed to type %1">,
61776173
InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure;
61786174
def ext_init_list_constant_narrowing_const_reference : ExtWarn<
6179-
"constant expression evaluates to %0 which cannot be narrowed to type %1">,
6175+
ext_init_list_constant_narrowing.Summary>,
61806176
InGroup<CXX11NarrowingConstReference>, DefaultError, SFINAEFailure;
61816177
def warn_init_list_type_narrowing : Warning<
61826178
"type %0 cannot be narrowed to %1 in initializer list in C++11">,

clang/lib/Sema/SemaInit.cpp

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10377,11 +10377,6 @@ void InitializationSequence::dump() const {
1037710377
dump(llvm::errs());
1037810378
}
1037910379

10380-
static bool NarrowingErrs(const LangOptions &L) {
10381-
return L.CPlusPlus11 &&
10382-
(!L.MicrosoftExt || L.isCompatibleWithMSVC(LangOptions::MSVC2015));
10383-
}
10384-
1038510380
static void DiagnoseNarrowingInInitList(Sema &S,
1038610381
const ImplicitConversionSequence &ICS,
1038710382
QualType PreNarrowingType,
@@ -10402,6 +10397,19 @@ static void DiagnoseNarrowingInInitList(Sema &S,
1040210397
return;
1040310398
}
1040410399

10400+
auto MakeDiag = [&](bool IsConstRef, unsigned DefaultDiagID,
10401+
unsigned ConstRefDiagID, unsigned WarnDiagID) {
10402+
unsigned DiagID;
10403+
auto &L = S.getLangOpts();
10404+
if (L.CPlusPlus11 &&
10405+
(!L.MicrosoftExt || L.isCompatibleWithMSVC(LangOptions::MSVC2015)))
10406+
DiagID = IsConstRef ? ConstRefDiagID : DefaultDiagID;
10407+
else
10408+
DiagID = WarnDiagID;
10409+
return S.Diag(PostInit->getBeginLoc(), DiagID)
10410+
<< PostInit->getSourceRange();
10411+
};
10412+
1040510413
// C++11 [dcl.init.list]p7: Check whether this is a narrowing conversion.
1040610414
APValue ConstantValue;
1040710415
QualType ConstantType;
@@ -10417,43 +10425,31 @@ static void DiagnoseNarrowingInInitList(Sema &S,
1041710425
// narrowing conversion even if the value is a constant and can be
1041810426
// represented exactly as an integer.
1041910427
QualType T = EntityType.getNonReferenceType();
10420-
S.Diag(PostInit->getBeginLoc(),
10421-
NarrowingErrs(S.getLangOpts())
10422-
? (T == EntityType
10423-
? diag::ext_init_list_type_narrowing
10424-
: diag::ext_init_list_type_narrowing_const_reference)
10425-
: diag::warn_init_list_type_narrowing)
10426-
<< PostInit->getSourceRange()
10428+
MakeDiag(T != EntityType, diag::ext_init_list_type_narrowing,
10429+
diag::ext_init_list_type_narrowing_const_reference,
10430+
diag::warn_init_list_type_narrowing)
1042710431
<< PreNarrowingType.getLocalUnqualifiedType()
1042810432
<< T.getLocalUnqualifiedType();
1042910433
break;
1043010434
}
1043110435

1043210436
case NK_Constant_Narrowing: {
1043310437
// A constant value was narrowed.
10434-
QualType T = EntityType.getNonReferenceType();
10435-
S.Diag(PostInit->getBeginLoc(),
10436-
NarrowingErrs(S.getLangOpts())
10437-
? (T == EntityType
10438-
? diag::ext_init_list_constant_narrowing
10439-
: diag::ext_init_list_constant_narrowing_const_reference)
10440-
: diag::warn_init_list_constant_narrowing)
10441-
<< PostInit->getSourceRange()
10438+
MakeDiag(EntityType.getNonReferenceType() != EntityType,
10439+
diag::ext_init_list_constant_narrowing,
10440+
diag::ext_init_list_constant_narrowing_const_reference,
10441+
diag::warn_init_list_constant_narrowing)
1044210442
<< ConstantValue.getAsString(S.getASTContext(), ConstantType)
1044310443
<< EntityType.getNonReferenceType().getLocalUnqualifiedType();
1044410444
break;
1044510445
}
1044610446

1044710447
case NK_Variable_Narrowing: {
1044810448
// A variable's value may have been narrowed.
10449-
QualType T = EntityType.getNonReferenceType();
10450-
S.Diag(PostInit->getBeginLoc(),
10451-
NarrowingErrs(S.getLangOpts())
10452-
? (T == EntityType
10453-
? diag::ext_init_list_variable_narrowing
10454-
: diag::ext_init_list_variable_narrowing_const_reference)
10455-
: diag::warn_init_list_variable_narrowing)
10456-
<< PostInit->getSourceRange()
10449+
MakeDiag(EntityType.getNonReferenceType() != EntityType,
10450+
diag::ext_init_list_variable_narrowing,
10451+
diag::ext_init_list_variable_narrowing_const_reference,
10452+
diag::warn_init_list_variable_narrowing)
1045710453
<< PreNarrowingType.getLocalUnqualifiedType()
1045810454
<< EntityType.getNonReferenceType().getLocalUnqualifiedType();
1045910455
break;

0 commit comments

Comments
 (0)