Skip to content

Commit ab1616f

Browse files
Refactor to avoid duplication
1 parent fc14083 commit ab1616f

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

clang/lib/Sema/SemaTemplate.cpp

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,36 +1228,37 @@ bool Sema::AttachTypeConstraint(AutoTypeLoc TL,
12281228
NonTypeTemplateParmDecl *NewConstrainedParm,
12291229
NonTypeTemplateParmDecl *OrigConstrainedParm,
12301230
SourceLocation EllipsisLoc) {
1231-
if (NewConstrainedParm->getType().getNonPackExpansionType() != TL.getType() ||
1232-
TL.getAutoKeyword() != AutoTypeKeyword::Auto) {
1233-
Diag(NewConstrainedParm->getTypeSourceInfo()->getTypeLoc().getBeginLoc(),
1234-
diag::err_unsupported_placeholder_constraint)
1235-
<< NewConstrainedParm->getTypeSourceInfo()
1236-
->getTypeLoc()
1237-
.getSourceRange();
1238-
NewConstrainedParm->setPlaceholderTypeConstraint(
1239-
RecoveryExpr::Create(Context, OrigConstrainedParm->getType(),
1240-
OrigConstrainedParm->getBeginLoc(),
1241-
OrigConstrainedParm->getEndLoc(), {}));
1242-
return true;
1243-
}
1244-
// FIXME: Concepts: This should be the type of the placeholder, but this is
1245-
// unclear in the wording right now.
1246-
DeclRefExpr *Ref =
1247-
BuildDeclRefExpr(OrigConstrainedParm, OrigConstrainedParm->getType(),
1248-
VK_PRValue, OrigConstrainedParm->getLocation());
1249-
assert(Ref != nullptr && "Unexpected nullptr!");
1231+
ExprResult ImmediatelyDeclaredConstraint = [&] {
1232+
if (NewConstrainedParm->getType().getNonPackExpansionType() !=
1233+
TL.getType() ||
1234+
TL.getAutoKeyword() != AutoTypeKeyword::Auto) {
1235+
Diag(NewConstrainedParm->getTypeSourceInfo()->getTypeLoc().getBeginLoc(),
1236+
diag::err_unsupported_placeholder_constraint)
1237+
<< NewConstrainedParm->getTypeSourceInfo()
1238+
->getTypeLoc()
1239+
.getSourceRange();
1240+
return ExprResult();
1241+
}
1242+
1243+
// FIXME: Concepts: This should be the type of the placeholder, but this is
1244+
// unclear in the wording right now.
1245+
DeclRefExpr *Ref =
1246+
BuildDeclRefExpr(OrigConstrainedParm, OrigConstrainedParm->getType(),
1247+
VK_PRValue, OrigConstrainedParm->getLocation());
1248+
assert(Ref != nullptr && "Unexpected nullptr!");
1249+
1250+
return formImmediatelyDeclaredConstraint(
1251+
*this, TL.getNestedNameSpecifierLoc(), TL.getConceptNameInfo(),
1252+
TL.getNamedConcept(), /*FoundDecl=*/TL.getFoundDecl(),
1253+
TL.getLAngleLoc(), TL.getRAngleLoc(), BuildDecltypeType(Ref),
1254+
OrigConstrainedParm->getLocation(),
1255+
[&](TemplateArgumentListInfo &ConstraintArgs) {
1256+
for (unsigned I = 0, C = TL.getNumArgs(); I != C; ++I)
1257+
ConstraintArgs.addArgument(TL.getArgLoc(I));
1258+
},
1259+
EllipsisLoc);
1260+
}();
12501261

1251-
ExprResult ImmediatelyDeclaredConstraint = formImmediatelyDeclaredConstraint(
1252-
*this, TL.getNestedNameSpecifierLoc(), TL.getConceptNameInfo(),
1253-
TL.getNamedConcept(), /*FoundDecl=*/TL.getFoundDecl(), TL.getLAngleLoc(),
1254-
TL.getRAngleLoc(), BuildDecltypeType(Ref),
1255-
OrigConstrainedParm->getLocation(),
1256-
[&](TemplateArgumentListInfo &ConstraintArgs) {
1257-
for (unsigned I = 0, C = TL.getNumArgs(); I != C; ++I)
1258-
ConstraintArgs.addArgument(TL.getArgLoc(I));
1259-
},
1260-
EllipsisLoc);
12611262
if (ImmediatelyDeclaredConstraint.isInvalid() ||
12621263
!ImmediatelyDeclaredConstraint.isUsable()) {
12631264
NewConstrainedParm->setPlaceholderTypeConstraint(

0 commit comments

Comments
 (0)