Skip to content

Commit 471bef0

Browse files
committed
Revert "[Clang] Distinguish expanding-pack-in-place cases for SubstTemplateTypeParmTypes (#114220)"
This reverts commit adb0d8d.
1 parent 424c8f9 commit 471bef0

File tree

9 files changed

+23
-70
lines changed

9 files changed

+23
-70
lines changed

clang/include/clang/AST/ASTContext.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,9 +1798,7 @@ class ASTContext : public RefCountedBase<ASTContext> {
17981798
QualType
17991799
getSubstTemplateTypeParmType(QualType Replacement, Decl *AssociatedDecl,
18001800
unsigned Index,
1801-
std::optional<unsigned> PackIndex,
1802-
SubstTemplateTypeParmTypeFlag Flag =
1803-
SubstTemplateTypeParmTypeFlag::None) const;
1801+
std::optional<unsigned> PackIndex) const;
18041802
QualType getSubstTemplateTypeParmPackType(Decl *AssociatedDecl,
18051803
unsigned Index, bool Final,
18061804
const TemplateArgument &ArgPack);

clang/include/clang/AST/PropertiesBase.td

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ def Selector : PropertyType;
137137
def SourceLocation : PropertyType;
138138
def StmtRef : RefPropertyType<"Stmt"> { let ConstWhenWriting = 1; }
139139
def ExprRef : SubclassPropertyType<"Expr", StmtRef>;
140-
def SubstTemplateTypeParmTypeFlag : EnumPropertyType;
141140
def TemplateArgument : PropertyType;
142141
def TemplateArgumentKind : EnumPropertyType<"TemplateArgument::ArgKind">;
143142
def TemplateName : DefaultValuePropertyType;

clang/include/clang/AST/Type.h

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1786,15 +1786,6 @@ enum class AutoTypeKeyword {
17861786
GNUAutoType
17871787
};
17881788

1789-
enum class SubstTemplateTypeParmTypeFlag {
1790-
None,
1791-
1792-
/// Whether to expand the pack using the stored PackIndex in place. This is
1793-
/// useful for e.g. substituting into an atomic constraint expression, where
1794-
/// that expression is part of an unexpanded pack.
1795-
ExpandPacksInPlace,
1796-
};
1797-
17981789
enum class ArraySizeModifier;
17991790
enum class ElaboratedTypeKeyword;
18001791
enum class VectorKind;
@@ -2164,9 +2155,6 @@ class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
21642155
LLVM_PREFERRED_TYPE(bool)
21652156
unsigned HasNonCanonicalUnderlyingType : 1;
21662157

2167-
LLVM_PREFERRED_TYPE(SubstTemplateTypeParmTypeFlag)
2168-
unsigned SubstitutionFlag : 1;
2169-
21702158
// The index of the template parameter this substitution represents.
21712159
unsigned Index : 15;
21722160

@@ -6409,8 +6397,7 @@ class SubstTemplateTypeParmType final
64096397
Decl *AssociatedDecl;
64106398

64116399
SubstTemplateTypeParmType(QualType Replacement, Decl *AssociatedDecl,
6412-
unsigned Index, std::optional<unsigned> PackIndex,
6413-
SubstTemplateTypeParmTypeFlag Flag);
6400+
unsigned Index, std::optional<unsigned> PackIndex);
64146401

64156402
public:
64166403
/// Gets the type that was substituted for the template
@@ -6439,31 +6426,21 @@ class SubstTemplateTypeParmType final
64396426
return SubstTemplateTypeParmTypeBits.PackIndex - 1;
64406427
}
64416428

6442-
SubstTemplateTypeParmTypeFlag getSubstitutionFlag() const {
6443-
return static_cast<SubstTemplateTypeParmTypeFlag>(
6444-
SubstTemplateTypeParmTypeBits.SubstitutionFlag);
6445-
}
6446-
64476429
bool isSugared() const { return true; }
64486430
QualType desugar() const { return getReplacementType(); }
64496431

64506432
void Profile(llvm::FoldingSetNodeID &ID) {
64516433
Profile(ID, getReplacementType(), getAssociatedDecl(), getIndex(),
6452-
getPackIndex(), getSubstitutionFlag());
6434+
getPackIndex());
64536435
}
64546436

64556437
static void Profile(llvm::FoldingSetNodeID &ID, QualType Replacement,
64566438
const Decl *AssociatedDecl, unsigned Index,
6457-
std::optional<unsigned> PackIndex,
6458-
SubstTemplateTypeParmTypeFlag Flag) {
6439+
std::optional<unsigned> PackIndex) {
64596440
Replacement.Profile(ID);
64606441
ID.AddPointer(AssociatedDecl);
64616442
ID.AddInteger(Index);
64626443
ID.AddInteger(PackIndex ? *PackIndex - 1 : 0);
6463-
ID.AddInteger(llvm::to_underlying(Flag));
6464-
assert((Flag != SubstTemplateTypeParmTypeFlag::ExpandPacksInPlace ||
6465-
PackIndex) &&
6466-
"ExpandPacksInPlace needs a valid PackIndex");
64676444
}
64686445

64696446
static bool classof(const Type *T) {

clang/include/clang/AST/TypeProperties.td

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -827,14 +827,11 @@ let Class = SubstTemplateTypeParmType in {
827827
def : Property<"PackIndex", Optional<UInt32>> {
828828
let Read = [{ node->getPackIndex() }];
829829
}
830-
def : Property<"SubstitutionFlag", SubstTemplateTypeParmTypeFlag> {
831-
let Read = [{ node->getSubstitutionFlag() }];
832-
}
833830

834831
// The call to getCanonicalType here existed in ASTReader.cpp, too.
835832
def : Creator<[{
836833
return ctx.getSubstTemplateTypeParmType(
837-
replacementType, associatedDecl, Index, PackIndex, SubstitutionFlag);
834+
replacementType, associatedDecl, Index, PackIndex);
838835
}]>;
839836
}
840837

clang/lib/AST/ASTContext.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5449,11 +5449,10 @@ QualType ASTContext::getHLSLAttributedResourceType(
54495449
/// Retrieve a substitution-result type.
54505450
QualType ASTContext::getSubstTemplateTypeParmType(
54515451
QualType Replacement, Decl *AssociatedDecl, unsigned Index,
5452-
std::optional<unsigned> PackIndex,
5453-
SubstTemplateTypeParmTypeFlag Flag) const {
5452+
std::optional<unsigned> PackIndex) const {
54545453
llvm::FoldingSetNodeID ID;
54555454
SubstTemplateTypeParmType::Profile(ID, Replacement, AssociatedDecl, Index,
5456-
PackIndex, Flag);
5455+
PackIndex);
54575456
void *InsertPos = nullptr;
54585457
SubstTemplateTypeParmType *SubstParm =
54595458
SubstTemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
@@ -5463,7 +5462,7 @@ QualType ASTContext::getSubstTemplateTypeParmType(
54635462
!Replacement.isCanonical()),
54645463
alignof(SubstTemplateTypeParmType));
54655464
SubstParm = new (Mem) SubstTemplateTypeParmType(Replacement, AssociatedDecl,
5466-
Index, PackIndex, Flag);
5465+
Index, PackIndex);
54675466
Types.push_back(SubstParm);
54685467
SubstTemplateTypeParmTypes.InsertNode(SubstParm, InsertPos);
54695468
}

clang/lib/AST/ASTImporter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,8 +1631,8 @@ ExpectedType ASTNodeImporter::VisitSubstTemplateTypeParmType(
16311631
return ToReplacementTypeOrErr.takeError();
16321632

16331633
return Importer.getToContext().getSubstTemplateTypeParmType(
1634-
*ToReplacementTypeOrErr, *ReplacedOrErr, T->getIndex(), T->getPackIndex(),
1635-
T->getSubstitutionFlag());
1634+
*ToReplacementTypeOrErr, *ReplacedOrErr, T->getIndex(),
1635+
T->getPackIndex());
16361636
}
16371637

16381638
ExpectedType ASTNodeImporter::VisitSubstTemplateTypeParmPackType(

clang/lib/AST/Type.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4270,7 +4270,7 @@ static const TemplateTypeParmDecl *getReplacedParameter(Decl *D,
42704270

42714271
SubstTemplateTypeParmType::SubstTemplateTypeParmType(
42724272
QualType Replacement, Decl *AssociatedDecl, unsigned Index,
4273-
std::optional<unsigned> PackIndex, SubstTemplateTypeParmTypeFlag Flag)
4273+
std::optional<unsigned> PackIndex)
42744274
: Type(SubstTemplateTypeParm, Replacement.getCanonicalType(),
42754275
Replacement->getDependence()),
42764276
AssociatedDecl(AssociatedDecl) {
@@ -4281,10 +4281,6 @@ SubstTemplateTypeParmType::SubstTemplateTypeParmType(
42814281

42824282
SubstTemplateTypeParmTypeBits.Index = Index;
42834283
SubstTemplateTypeParmTypeBits.PackIndex = PackIndex ? *PackIndex + 1 : 0;
4284-
SubstTemplateTypeParmTypeBits.SubstitutionFlag = llvm::to_underlying(Flag);
4285-
assert((Flag != SubstTemplateTypeParmTypeFlag::ExpandPacksInPlace ||
4286-
PackIndex) &&
4287-
"ExpandPacksInPlace needs a valid PackIndex");
42884284
assert(AssociatedDecl != nullptr);
42894285
}
42904286

clang/lib/Sema/SemaTemplateInstantiate.cpp

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1720,17 +1720,14 @@ namespace {
17201720
QualType
17211721
TransformSubstTemplateTypeParmType(TypeLocBuilder &TLB,
17221722
SubstTemplateTypeParmTypeLoc TL) {
1723-
const SubstTemplateTypeParmType *Type = TL.getTypePtr();
1724-
if (Type->getSubstitutionFlag() !=
1725-
SubstTemplateTypeParmTypeFlag::ExpandPacksInPlace)
1723+
if (SemaRef.CodeSynthesisContexts.back().Kind !=
1724+
Sema::CodeSynthesisContext::ConstraintSubstitution)
17261725
return inherited::TransformSubstTemplateTypeParmType(TLB, TL);
17271726

1728-
assert(Type->getPackIndex());
1729-
TemplateArgument TA = TemplateArgs(
1730-
Type->getReplacedParameter()->getDepth(), Type->getIndex());
1731-
assert(*Type->getPackIndex() + 1 <= TA.pack_size());
1732-
Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(
1733-
SemaRef, TA.pack_size() - 1 - *Type->getPackIndex());
1727+
auto PackIndex = TL.getTypePtr()->getPackIndex();
1728+
std::optional<Sema::ArgumentPackSubstitutionIndexRAII> SubstIndex;
1729+
if (SemaRef.ArgumentPackSubstitutionIndex == -1 && PackIndex)
1730+
SubstIndex.emplace(SemaRef, *PackIndex);
17341731

17351732
return inherited::TransformSubstTemplateTypeParmType(TLB, TL);
17361733
}
@@ -3176,11 +3173,7 @@ struct ExpandPackedTypeConstraints
31763173

31773174
using inherited = TreeTransform<ExpandPackedTypeConstraints>;
31783175

3179-
const MultiLevelTemplateArgumentList &TemplateArgs;
3180-
3181-
ExpandPackedTypeConstraints(
3182-
Sema &SemaRef, const MultiLevelTemplateArgumentList &TemplateArgs)
3183-
: inherited(SemaRef), TemplateArgs(TemplateArgs) {}
3176+
ExpandPackedTypeConstraints(Sema &SemaRef) : inherited(SemaRef) {}
31843177

31853178
using inherited::TransformTemplateTypeParmType;
31863179

@@ -3196,15 +3189,9 @@ struct ExpandPackedTypeConstraints
31963189

31973190
assert(SemaRef.ArgumentPackSubstitutionIndex != -1);
31983191

3199-
TemplateArgument Arg = TemplateArgs(T->getDepth(), T->getIndex());
3200-
3201-
std::optional<unsigned> PackIndex;
3202-
if (Arg.getKind() == TemplateArgument::Pack)
3203-
PackIndex = Arg.pack_size() - 1 - SemaRef.ArgumentPackSubstitutionIndex;
3204-
32053192
QualType Result = SemaRef.Context.getSubstTemplateTypeParmType(
3206-
TL.getType(), T->getDecl(), T->getIndex(), PackIndex,
3207-
SubstTemplateTypeParmTypeFlag::ExpandPacksInPlace);
3193+
TL.getType(), T->getDecl(), T->getIndex(),
3194+
SemaRef.ArgumentPackSubstitutionIndex);
32083195
SubstTemplateTypeParmTypeLoc NewTL =
32093196
TLB.push<SubstTemplateTypeParmTypeLoc>(Result);
32103197
NewTL.setNameLoc(TL.getNameLoc());
@@ -3263,8 +3250,8 @@ bool Sema::SubstTypeConstraint(
32633250
TemplateArgumentListInfo InstArgs;
32643251
InstArgs.setLAngleLoc(TemplArgInfo->LAngleLoc);
32653252
InstArgs.setRAngleLoc(TemplArgInfo->RAngleLoc);
3266-
if (ExpandPackedTypeConstraints(*this, TemplateArgs)
3267-
.SubstTemplateArguments(TemplArgInfo->arguments(), InstArgs))
3253+
if (ExpandPackedTypeConstraints(*this).SubstTemplateArguments(
3254+
TemplArgInfo->arguments(), InstArgs))
32683255
return true;
32693256

32703257
// The type of the original parameter.

clang/test/SemaCXX/cxx20-ctad-type-alias.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ struct Out {
485485
A(T2);
486486
};
487487
A(int) -> A<T1>;
488-
488+
489489
template <typename T3>
490490
using B = A<T3>;
491491
};

0 commit comments

Comments
 (0)