Skip to content

Commit fb19649

Browse files
authored
[Clang][NFCI] Remove records of unsatisfied atomic expressions in ConstraintSatisfaction (#98654)
This expression doesn't appear to be ever used, so let's remove it from the data structure. Fixed some spelling issues as well.
1 parent 8735780 commit fb19649

File tree

6 files changed

+38
-51
lines changed

6 files changed

+38
-51
lines changed

clang/include/clang/AST/ASTConcept.h

+4-7
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,10 @@ class ConstraintSatisfaction : public llvm::FoldingSetNode {
5353
bool IsSatisfied = false;
5454
bool ContainsErrors = false;
5555

56-
/// \brief Pairs of unsatisfied atomic constraint expressions along with the
57-
/// substituted constraint expr, if the template arguments could be
56+
/// \brief The substituted constraint expr, if the template arguments could be
5857
/// substituted into them, or a diagnostic if substitution resulted in an
5958
/// invalid expression.
60-
llvm::SmallVector<std::pair<const Expr *, Detail>, 4> Details;
59+
llvm::SmallVector<Detail, 4> Details;
6160

6261
void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &C) {
6362
Profile(ID, C, ConstraintOwner, TemplateArgs);
@@ -69,7 +68,7 @@ class ConstraintSatisfaction : public llvm::FoldingSetNode {
6968

7069
bool HasSubstitutionFailure() {
7170
for (const auto &Detail : Details)
72-
if (Detail.second.dyn_cast<SubstitutionDiagnostic *>())
71+
if (Detail.dyn_cast<SubstitutionDiagnostic *>())
7372
return true;
7473
return false;
7574
}
@@ -80,9 +79,7 @@ class ConstraintSatisfaction : public llvm::FoldingSetNode {
8079
/// substituted into them, or a diagnostic if substitution resulted in
8180
/// an invalid expression.
8281
using UnsatisfiedConstraintRecord =
83-
std::pair<const Expr *,
84-
llvm::PointerUnion<Expr *,
85-
std::pair<SourceLocation, StringRef> *>>;
82+
llvm::PointerUnion<Expr *, std::pair<SourceLocation, StringRef> *>;
8683

8784
/// \brief The result of a constraint satisfaction check, containing the
8885
/// necessary information to diagnose an unsatisfied constraint.

clang/lib/AST/ASTConcept.cpp

+10-14
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,31 @@
1919

2020
using namespace clang;
2121

22-
namespace {
23-
void CreatUnsatisfiedConstraintRecord(
24-
const ASTContext &C, const UnsatisfiedConstraintRecord &Detail,
25-
UnsatisfiedConstraintRecord *TrailingObject) {
26-
if (Detail.second.is<Expr *>())
27-
new (TrailingObject) UnsatisfiedConstraintRecord{
28-
Detail.first,
29-
UnsatisfiedConstraintRecord::second_type(Detail.second.get<Expr *>())};
22+
static void
23+
CreateUnsatisfiedConstraintRecord(const ASTContext &C,
24+
const UnsatisfiedConstraintRecord &Detail,
25+
UnsatisfiedConstraintRecord *TrailingObject) {
26+
if (Detail.is<Expr *>())
27+
new (TrailingObject) UnsatisfiedConstraintRecord(Detail.get<Expr *>());
3028
else {
3129
auto &SubstitutionDiagnostic =
32-
*Detail.second.get<std::pair<SourceLocation, StringRef> *>();
30+
*Detail.get<std::pair<SourceLocation, StringRef> *>();
3331
unsigned MessageSize = SubstitutionDiagnostic.second.size();
3432
char *Mem = new (C) char[MessageSize];
3533
memcpy(Mem, SubstitutionDiagnostic.second.data(), MessageSize);
3634
auto *NewSubstDiag = new (C) std::pair<SourceLocation, StringRef>(
3735
SubstitutionDiagnostic.first, StringRef(Mem, MessageSize));
38-
new (TrailingObject) UnsatisfiedConstraintRecord{
39-
Detail.first, UnsatisfiedConstraintRecord::second_type(NewSubstDiag)};
36+
new (TrailingObject) UnsatisfiedConstraintRecord(NewSubstDiag);
4037
}
4138
}
42-
} // namespace
4339

4440
ASTConstraintSatisfaction::ASTConstraintSatisfaction(
4541
const ASTContext &C, const ConstraintSatisfaction &Satisfaction)
4642
: NumRecords{Satisfaction.Details.size()},
4743
IsSatisfied{Satisfaction.IsSatisfied}, ContainsErrors{
4844
Satisfaction.ContainsErrors} {
4945
for (unsigned I = 0; I < NumRecords; ++I)
50-
CreatUnsatisfiedConstraintRecord(
46+
CreateUnsatisfiedConstraintRecord(
5147
C, Satisfaction.Details[I],
5248
getTrailingObjects<UnsatisfiedConstraintRecord>() + I);
5349
}
@@ -58,7 +54,7 @@ ASTConstraintSatisfaction::ASTConstraintSatisfaction(
5854
IsSatisfied{Satisfaction.IsSatisfied},
5955
ContainsErrors{Satisfaction.ContainsErrors} {
6056
for (unsigned I = 0; I < NumRecords; ++I)
61-
CreatUnsatisfiedConstraintRecord(
57+
CreateUnsatisfiedConstraintRecord(
6258
C, *(Satisfaction.begin() + I),
6359
getTrailingObjects<UnsatisfiedConstraintRecord>() + I);
6460
}

clang/lib/Sema/SemaConcept.cpp

+15-18
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,6 @@ calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr,
273273
char *Mem = new (S.Context) char[MessageSize];
274274
memcpy(Mem, DiagString.c_str(), MessageSize);
275275
Satisfaction.Details.emplace_back(
276-
ConstraintExpr,
277276
new (S.Context) ConstraintSatisfaction::SubstitutionDiagnostic{
278277
SubstitutedAtomicExpr.get()->getBeginLoc(),
279278
StringRef(Mem, MessageSize)});
@@ -302,8 +301,7 @@ calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr,
302301
"evaluating bool expression didn't produce int");
303302
Satisfaction.IsSatisfied = EvalResult.Val.getInt().getBoolValue();
304303
if (!Satisfaction.IsSatisfied)
305-
Satisfaction.Details.emplace_back(ConstraintExpr,
306-
SubstitutedAtomicExpr.get());
304+
Satisfaction.Details.emplace_back(SubstitutedAtomicExpr.get());
307305

308306
return SubstitutedAtomicExpr;
309307
}
@@ -393,9 +391,8 @@ static ExprResult calculateConstraintSatisfaction(
393391
char *Mem = new (S.Context) char[MessageSize];
394392
memcpy(Mem, DiagString.c_str(), MessageSize);
395393
Satisfaction.Details.emplace_back(
396-
AtomicExpr,
397394
new (S.Context) ConstraintSatisfaction::SubstitutionDiagnostic{
398-
SubstDiag.first, StringRef(Mem, MessageSize)});
395+
SubstDiag.first, StringRef(Mem, MessageSize)});
399396
Satisfaction.IsSatisfied = false;
400397
return ExprEmpty();
401398
}
@@ -1056,13 +1053,14 @@ static void diagnoseUnsatisfiedRequirement(Sema &S,
10561053
concepts::NestedRequirement *Req,
10571054
bool First) {
10581055
using SubstitutionDiagnostic = std::pair<SourceLocation, StringRef>;
1059-
for (auto &Pair : Req->getConstraintSatisfaction()) {
1060-
if (auto *SubstDiag = Pair.second.dyn_cast<SubstitutionDiagnostic *>())
1056+
for (auto &Record : Req->getConstraintSatisfaction()) {
1057+
if (auto *SubstDiag = Record.dyn_cast<SubstitutionDiagnostic *>())
10611058
S.Diag(SubstDiag->first, diag::note_nested_requirement_substitution_error)
1062-
<< (int)First << Req->getInvalidConstraintEntity() << SubstDiag->second;
1059+
<< (int)First << Req->getInvalidConstraintEntity()
1060+
<< SubstDiag->second;
10631061
else
1064-
diagnoseWellFormedUnsatisfiedConstraintExpr(
1065-
S, Pair.second.dyn_cast<Expr *>(), First);
1062+
diagnoseWellFormedUnsatisfiedConstraintExpr(S, Record.dyn_cast<Expr *>(),
1063+
First);
10661064
First = false;
10671065
}
10681066
}
@@ -1176,12 +1174,11 @@ static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S,
11761174
<< (int)First << SubstExpr;
11771175
}
11781176

1179-
template<typename SubstitutionDiagnostic>
1177+
template <typename SubstitutionDiagnostic>
11801178
static void diagnoseUnsatisfiedConstraintExpr(
1181-
Sema &S, const Expr *E,
1182-
const llvm::PointerUnion<Expr *, SubstitutionDiagnostic *> &Record,
1179+
Sema &S, const llvm::PointerUnion<Expr *, SubstitutionDiagnostic *> &Record,
11831180
bool First = true) {
1184-
if (auto *Diag = Record.template dyn_cast<SubstitutionDiagnostic *>()){
1181+
if (auto *Diag = Record.template dyn_cast<SubstitutionDiagnostic *>()) {
11851182
S.Diag(Diag->first, diag::note_substituted_constraint_expr_is_ill_formed)
11861183
<< Diag->second;
11871184
return;
@@ -1196,8 +1193,8 @@ Sema::DiagnoseUnsatisfiedConstraint(const ConstraintSatisfaction& Satisfaction,
11961193
bool First) {
11971194
assert(!Satisfaction.IsSatisfied &&
11981195
"Attempted to diagnose a satisfied constraint");
1199-
for (auto &Pair : Satisfaction.Details) {
1200-
diagnoseUnsatisfiedConstraintExpr(*this, Pair.first, Pair.second, First);
1196+
for (auto &Record : Satisfaction.Details) {
1197+
diagnoseUnsatisfiedConstraintExpr(*this, Record, First);
12011198
First = false;
12021199
}
12031200
}
@@ -1207,8 +1204,8 @@ void Sema::DiagnoseUnsatisfiedConstraint(
12071204
bool First) {
12081205
assert(!Satisfaction.IsSatisfied &&
12091206
"Attempted to diagnose a satisfied constraint");
1210-
for (auto &Pair : Satisfaction) {
1211-
diagnoseUnsatisfiedConstraintExpr(*this, Pair.first, Pair.second, First);
1207+
for (auto &Record : Satisfaction) {
1208+
diagnoseUnsatisfiedConstraintExpr(*this, Record, First);
12121209
First = false;
12131210
}
12141211
}

clang/lib/Sema/SemaTemplate.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -4250,10 +4250,10 @@ TemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(
42504250

42514251
// C++ [temp.expl.spec]p16:
42524252
// In an explicit specialization declaration for a member of a class
4253-
// template or a member template that ap- pears in namespace scope, the
4253+
// template or a member template that appears in namespace scope, the
42544254
// member template and some of its enclosing class templates may remain
42554255
// unspecialized, except that the declaration shall not explicitly
4256-
// specialize a class member template if its en- closing class templates
4256+
// specialize a class member template if its enclosing class templates
42574257
// are not explicitly specialized as well.
42584258
if (ParamIdx < ParamLists.size()) {
42594259
if (ParamLists[ParamIdx]->size() == 0) {

clang/lib/Serialization/ASTReaderStmt.cpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -793,16 +793,15 @@ readConstraintSatisfaction(ASTRecordReader &Record) {
793793
if (!Satisfaction.IsSatisfied) {
794794
unsigned NumDetailRecords = Record.readInt();
795795
for (unsigned i = 0; i != NumDetailRecords; ++i) {
796-
Expr *ConstraintExpr = Record.readExpr();
797796
if (/* IsDiagnostic */Record.readInt()) {
798797
SourceLocation DiagLocation = Record.readSourceLocation();
799798
std::string DiagMessage = Record.readString();
800799
Satisfaction.Details.emplace_back(
801-
ConstraintExpr, new (Record.getContext())
802-
ConstraintSatisfaction::SubstitutionDiagnostic{
803-
DiagLocation, DiagMessage});
800+
new (Record.getContext())
801+
ConstraintSatisfaction::SubstitutionDiagnostic(DiagLocation,
802+
DiagMessage));
804803
} else
805-
Satisfaction.Details.emplace_back(ConstraintExpr, Record.readExpr());
804+
Satisfaction.Details.emplace_back(Record.readExpr());
806805
}
807806
}
808807
return Satisfaction;

clang/lib/Serialization/ASTWriterStmt.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -474,14 +474,12 @@ addConstraintSatisfaction(ASTRecordWriter &Record,
474474
if (!Satisfaction.IsSatisfied) {
475475
Record.push_back(Satisfaction.NumRecords);
476476
for (const auto &DetailRecord : Satisfaction) {
477-
Record.writeStmtRef(DetailRecord.first);
478-
auto *E = DetailRecord.second.dyn_cast<Expr *>();
479-
Record.push_back(E == nullptr);
477+
auto *E = DetailRecord.dyn_cast<Expr *>();
478+
Record.push_back(/* IsDiagnostic */ E == nullptr);
480479
if (E)
481480
Record.AddStmt(E);
482481
else {
483-
auto *Diag = DetailRecord.second.get<std::pair<SourceLocation,
484-
StringRef> *>();
482+
auto *Diag = DetailRecord.get<std::pair<SourceLocation, StringRef> *>();
485483
Record.AddSourceLocation(Diag->first);
486484
Record.AddString(Diag->second);
487485
}

0 commit comments

Comments
 (0)