[clang] [NFC][clang] change remaining context-dependent type nodes to ContextualFoldingSet (PR #67751)
Matheus Izvekov via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 28 15:55:48 PDT 2023
https://github.com/mizvekov created https://github.com/llvm/llvm-project/pull/67751
Stacked, consider only last commit.
>From 7009ebf7f2016816b5cbb694e0611cd2a86d7cf1 Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizvekov at gmail.com>
Date: Thu, 28 Sep 2023 22:38:59 +0200
Subject: [PATCH 1/2] [clang] implement common sugared type of inst-dependent
DecltypeType
While a DecltypeType node itself is not uniqued, an
instantiation dependent DecltypeType will have a
DependentDecltypeType as an underlying type, which is uniqued.
In that case, there can be non-identical non-sugar DecltypeTypes nodes
which nonetheless represent the same type.
Fixes https://github.com/llvm/llvm-project/issues/67603
---
clang/docs/ReleaseNotes.rst | 3 +++
clang/lib/AST/ASTContext.cpp | 9 ++++++++-
clang/test/SemaCXX/sugar-common-types.cpp | 11 +++++++++++
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 1d74c492845a6c3..09302040a3510b6 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -266,6 +266,9 @@ Bug Fixes in This Version
(`#64836 <https://github.com/llvm/llvm-project/issues/64836>`_)
- Clang now allows an ``_Atomic`` qualified integer in a switch statement. Fixes
(`#65557 <https://github.com/llvm/llvm-project/issues/65557>`_)
+- Fixes crash when trying to obtain the common sugared type of
+ `decltype(instantiation-dependent-expr)`.
+ Fixes (`#67603 <https://github.com/llvm/llvm-project/issues/67603>`_)
Bug Fixes to Compiler Builtins
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 57aaa05b1d81ddb..5ce0b54166e0255 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -12705,7 +12705,6 @@ static QualType getCommonNonSugarTypeNode(ASTContext &Ctx, const Type *X,
#define SUGAR_FREE_TYPE(Class) UNEXPECTED_TYPE(Class, "sugar-free")
SUGAR_FREE_TYPE(Builtin)
- SUGAR_FREE_TYPE(Decltype)
SUGAR_FREE_TYPE(DeducedTemplateSpecialization)
SUGAR_FREE_TYPE(DependentBitInt)
SUGAR_FREE_TYPE(Enum)
@@ -12935,6 +12934,14 @@ static QualType getCommonNonSugarTypeNode(ASTContext &Ctx, const Type *X,
TY->getTemplateName()),
As, X->getCanonicalTypeInternal());
}
+ case Type::Decltype: {
+ const auto *DX = cast<DecltypeType>(X), *DY = cast<DecltypeType>(Y);
+ assert(DX->isDependentType());
+ assert(DY->isDependentType());
+ assert(Ctx.hasSameExpr(DX->getUnderlyingExpr(), DY->getUnderlyingExpr()));
+ // As Decltype is not uniqued, building a common type would be wasteful.
+ return QualType(DX, 0);
+ }
case Type::DependentName: {
const auto *NX = cast<DependentNameType>(X),
*NY = cast<DependentNameType>(Y);
diff --git a/clang/test/SemaCXX/sugar-common-types.cpp b/clang/test/SemaCXX/sugar-common-types.cpp
index 4a8ff2addb66359..e1c7578a66b9cad 100644
--- a/clang/test/SemaCXX/sugar-common-types.cpp
+++ b/clang/test/SemaCXX/sugar-common-types.cpp
@@ -142,3 +142,14 @@ namespace PR61419 {
extern const pair<id, id> p;
id t = false ? p.first : p.second;
} // namespace PR61419
+
+namespace GH67603 {
+ template <class> using A = long;
+ template <class B> void h() {
+ using C = B;
+ using D = B;
+ N t = 0 ? A<decltype(C())>() : A<decltype(D())>();
+ // expected-error at -1 {{rvalue of type 'A<decltype(C())>' (aka 'long')}}
+ }
+ template void h<int>();
+} // namespace GH67603
>From b6f194c89bafad17e1dcc76b3a87d2330aac1c10 Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizvekov at gmail.com>
Date: Fri, 29 Sep 2023 00:49:16 +0200
Subject: [PATCH 2/2] [NFC][clang] change remaining context-dependent type
nodes to ContextualFoldingSet
---
clang/include/clang/AST/ASTContext.h | 24 ++++++----
clang/include/clang/AST/Type.h | 62 ++++++++++---------------
clang/lib/AST/ASTContext.cpp | 68 ++++++++++++----------------
clang/lib/AST/Type.cpp | 47 +++++++++----------
4 files changed, 90 insertions(+), 111 deletions(-)
diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h
index 4ee32c76a95d8e3..8ad0514ee2ce227 100644
--- a/clang/include/clang/AST/ASTContext.h
+++ b/clang/include/clang/AST/ASTContext.h
@@ -195,20 +195,25 @@ class ASTContext : public RefCountedBase<ASTContext> {
ConstantArrayTypes;
mutable llvm::FoldingSet<IncompleteArrayType> IncompleteArrayTypes;
mutable std::vector<VariableArrayType*> VariableArrayTypes;
- mutable llvm::FoldingSet<DependentSizedArrayType> DependentSizedArrayTypes;
- mutable llvm::FoldingSet<DependentSizedExtVectorType>
- DependentSizedExtVectorTypes;
- mutable llvm::FoldingSet<DependentAddressSpaceType>
+ mutable llvm::ContextualFoldingSet<DependentSizedArrayType, ASTContext &>
+ DependentSizedArrayTypes;
+ mutable llvm::ContextualFoldingSet<DependentSizedExtVectorType, ASTContext &>
+ DependentSizedExtVectorTypes;
+ mutable llvm::ContextualFoldingSet<DependentAddressSpaceType, ASTContext &>
DependentAddressSpaceTypes;
mutable llvm::FoldingSet<VectorType> VectorTypes;
- mutable llvm::FoldingSet<DependentVectorType> DependentVectorTypes;
+ mutable llvm::ContextualFoldingSet<DependentVectorType, ASTContext &>
+ DependentVectorTypes;
mutable llvm::FoldingSet<ConstantMatrixType> MatrixTypes;
- mutable llvm::FoldingSet<DependentSizedMatrixType> DependentSizedMatrixTypes;
+ mutable llvm::ContextualFoldingSet<DependentSizedMatrixType, ASTContext &>
+ DependentSizedMatrixTypes;
mutable llvm::FoldingSet<FunctionNoProtoType> FunctionNoProtoTypes;
mutable llvm::ContextualFoldingSet<FunctionProtoType, ASTContext&>
FunctionProtoTypes;
- mutable llvm::FoldingSet<DependentTypeOfExprType> DependentTypeOfExprTypes;
- mutable llvm::FoldingSet<DependentDecltypeType> DependentDecltypeTypes;
+ mutable llvm::ContextualFoldingSet<DependentTypeOfExprType, ASTContext &>
+ DependentTypeOfExprTypes;
+ mutable llvm::ContextualFoldingSet<DependentDecltypeType, ASTContext &>
+ DependentDecltypeTypes;
mutable llvm::FoldingSet<TemplateTypeParmType> TemplateTypeParmTypes;
mutable llvm::FoldingSet<ObjCTypeParamType> ObjCTypeParamTypes;
mutable llvm::FoldingSet<SubstTemplateTypeParmType>
@@ -238,7 +243,8 @@ class ASTContext : public RefCountedBase<ASTContext> {
mutable llvm::FoldingSet<AttributedType> AttributedTypes;
mutable llvm::FoldingSet<PipeType> PipeTypes;
mutable llvm::FoldingSet<BitIntType> BitIntTypes;
- mutable llvm::FoldingSet<DependentBitIntType> DependentBitIntTypes;
+ mutable llvm::ContextualFoldingSet<DependentBitIntType, ASTContext &>
+ DependentBitIntTypes;
llvm::FoldingSet<BTFTagAttributedType> BTFTagAttributedTypes;
mutable llvm::FoldingSet<QualifiedTemplateName> QualifiedTemplateNames;
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 4799f89db82fa7f..a78d8f60462b231 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -3289,8 +3289,6 @@ class VariableArrayType : public ArrayType {
class DependentSizedArrayType : public ArrayType {
friend class ASTContext; // ASTContext creates these.
- const ASTContext &Context;
-
/// An assignment expression that will instantiate to the
/// size of the array.
///
@@ -3301,8 +3299,8 @@ class DependentSizedArrayType : public ArrayType {
/// The range spanned by the left and right array brackets.
SourceRange Brackets;
- DependentSizedArrayType(const ASTContext &Context, QualType et, QualType can,
- Expr *e, ArraySizeModifier sm, unsigned tq,
+ DependentSizedArrayType(QualType et, QualType can, Expr *e,
+ ArraySizeModifier sm, unsigned tq,
SourceRange brackets);
public:
@@ -3325,7 +3323,7 @@ class DependentSizedArrayType : public ArrayType {
return T->getTypeClass() == DependentSizedArray;
}
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, getElementType(),
getSizeModifier(), getIndexTypeCVRQualifiers(), getSizeExpr());
}
@@ -3349,14 +3347,12 @@ class DependentSizedArrayType : public ArrayType {
class DependentAddressSpaceType : public Type, public llvm::FoldingSetNode {
friend class ASTContext;
- const ASTContext &Context;
Expr *AddrSpaceExpr;
QualType PointeeType;
SourceLocation loc;
- DependentAddressSpaceType(const ASTContext &Context, QualType PointeeType,
- QualType can, Expr *AddrSpaceExpr,
- SourceLocation loc);
+ DependentAddressSpaceType(QualType PointeeType, QualType can,
+ Expr *AddrSpaceExpr, SourceLocation loc);
public:
Expr *getAddrSpaceExpr() const { return AddrSpaceExpr; }
@@ -3370,7 +3366,7 @@ class DependentAddressSpaceType : public Type, public llvm::FoldingSetNode {
return T->getTypeClass() == DependentAddressSpace;
}
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, getPointeeType(), getAddrSpaceExpr());
}
@@ -3391,7 +3387,6 @@ class DependentAddressSpaceType : public Type, public llvm::FoldingSetNode {
class DependentSizedExtVectorType : public Type, public llvm::FoldingSetNode {
friend class ASTContext;
- const ASTContext &Context;
Expr *SizeExpr;
/// The element type of the array.
@@ -3399,8 +3394,8 @@ class DependentSizedExtVectorType : public Type, public llvm::FoldingSetNode {
SourceLocation loc;
- DependentSizedExtVectorType(const ASTContext &Context, QualType ElementType,
- QualType can, Expr *SizeExpr, SourceLocation loc);
+ DependentSizedExtVectorType(QualType ElementType, QualType can,
+ Expr *SizeExpr, SourceLocation loc);
public:
Expr *getSizeExpr() const { return SizeExpr; }
@@ -3414,7 +3409,7 @@ class DependentSizedExtVectorType : public Type, public llvm::FoldingSetNode {
return T->getTypeClass() == DependentSizedExtVector;
}
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, getElementType(), getSizeExpr());
}
@@ -3513,14 +3508,12 @@ class VectorType : public Type, public llvm::FoldingSetNode {
class DependentVectorType : public Type, public llvm::FoldingSetNode {
friend class ASTContext;
- const ASTContext &Context;
QualType ElementType;
Expr *SizeExpr;
SourceLocation Loc;
- DependentVectorType(const ASTContext &Context, QualType ElementType,
- QualType CanonType, Expr *SizeExpr,
- SourceLocation Loc, VectorType::VectorKind vecKind);
+ DependentVectorType(QualType ElementType, QualType CanonType, Expr *SizeExpr,
+ SourceLocation Loc, VectorType::VectorKind vecKind);
public:
Expr *getSizeExpr() const { return SizeExpr; }
@@ -3537,7 +3530,7 @@ class DependentVectorType : public Type, public llvm::FoldingSetNode {
return T->getTypeClass() == DependentVector;
}
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, getElementType(), getSizeExpr(), getVectorKind());
}
@@ -3719,15 +3712,13 @@ class ConstantMatrixType final : public MatrixType {
class DependentSizedMatrixType final : public MatrixType {
friend class ASTContext;
- const ASTContext &Context;
Expr *RowExpr;
Expr *ColumnExpr;
SourceLocation loc;
- DependentSizedMatrixType(const ASTContext &Context, QualType ElementType,
- QualType CanonicalType, Expr *RowExpr,
- Expr *ColumnExpr, SourceLocation loc);
+ DependentSizedMatrixType(QualType ElementType, QualType CanonicalType,
+ Expr *RowExpr, Expr *ColumnExpr, SourceLocation loc);
public:
Expr *getRowExpr() const { return RowExpr; }
@@ -3738,7 +3729,7 @@ class DependentSizedMatrixType final : public MatrixType {
return T->getTypeClass() == DependentSizedMatrix;
}
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, getElementType(), getRowExpr(), getColumnExpr());
}
@@ -4749,15 +4740,12 @@ class TypeOfExprType : public Type {
/// This class is used internally by the ASTContext to manage
/// canonical, dependent types, only. Clients will only see instances
/// of this class via TypeOfExprType nodes.
-class DependentTypeOfExprType
- : public TypeOfExprType, public llvm::FoldingSetNode {
- const ASTContext &Context;
-
+class DependentTypeOfExprType : public TypeOfExprType,
+ public llvm::FoldingSetNode {
public:
- DependentTypeOfExprType(const ASTContext &Context, Expr *E, TypeOfKind Kind)
- : TypeOfExprType(E, Kind), Context(Context) {}
+ DependentTypeOfExprType(Expr *E, TypeOfKind Kind) : TypeOfExprType(E, Kind) {}
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, getUnderlyingExpr(),
getKind() == TypeOfKind::Unqualified);
}
@@ -4833,12 +4821,10 @@ class DecltypeType : public Type {
/// canonical, dependent types, only. Clients will only see instances
/// of this class via DecltypeType nodes.
class DependentDecltypeType : public DecltypeType, public llvm::FoldingSetNode {
- const ASTContext &Context;
-
public:
- DependentDecltypeType(const ASTContext &Context, Expr *E);
+ DependentDecltypeType(Expr *E, QualType UnderlyingTpe);
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, getUnderlyingExpr());
}
@@ -6657,12 +6643,10 @@ class BitIntType final : public Type, public llvm::FoldingSetNode {
class DependentBitIntType final : public Type, public llvm::FoldingSetNode {
friend class ASTContext;
- const ASTContext &Context;
llvm::PointerIntPair<Expr*, 1, bool> ExprAndUnsigned;
protected:
- DependentBitIntType(const ASTContext &Context, bool IsUnsigned,
- Expr *NumBits);
+ DependentBitIntType(bool IsUnsigned, Expr *NumBits);
public:
bool isUnsigned() const;
@@ -6672,7 +6656,7 @@ class DependentBitIntType final : public Type, public llvm::FoldingSetNode {
bool isSugared() const { return false; }
QualType desugar() const { return QualType(this, 0); }
- void Profile(llvm::FoldingSetNodeID &ID) {
+ void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) {
Profile(ID, Context, isUnsigned(), getNumBitsExpr());
}
static void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context,
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 5ce0b54166e0255..93c4baecbe6fd30 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -925,6 +925,10 @@ ASTContext::ASTContext(LangOptions &LOpts, SourceManager &SM,
IdentifierTable &idents, SelectorTable &sels,
Builtin::Context &builtins, TranslationUnitKind TUKind)
: ConstantArrayTypes(this_(), ConstantArrayTypesLog2InitSize),
+ DependentSizedArrayTypes(this_()), DependentSizedExtVectorTypes(this_()),
+ DependentAddressSpaceTypes(this_()), DependentVectorTypes(this_()),
+ DependentSizedMatrixTypes(this_()), DependentTypeOfExprTypes(this_()),
+ DependentDecltypeTypes(this_()), DependentBitIntTypes(this_()),
FunctionProtoTypes(this_(), FunctionProtoTypesLog2InitSize),
TemplateSpecializationTypes(this_()),
DependentTemplateSpecializationTypes(this_()), AutoTypes(this_()),
@@ -3786,11 +3790,8 @@ QualType ASTContext::getDependentSizedArrayType(QualType elementType,
// initializer. We do no canonicalization here at all, which is okay
// because they can't be used in most locations.
if (!numElements) {
- auto *newType
- = new (*this, TypeAlignment)
- DependentSizedArrayType(*this, elementType, QualType(),
- numElements, ASM, elementTypeQuals,
- brackets);
+ auto *newType = new (*this, TypeAlignment) DependentSizedArrayType(
+ elementType, QualType(), numElements, ASM, elementTypeQuals, brackets);
Types.push_back(newType);
return QualType(newType, 0);
}
@@ -3813,9 +3814,8 @@ QualType ASTContext::getDependentSizedArrayType(QualType elementType,
// If we don't have one, build one.
if (!canonTy) {
canonTy = new (*this, TypeAlignment)
- DependentSizedArrayType(*this, QualType(canonElementType.Ty, 0),
- QualType(), numElements, ASM, elementTypeQuals,
- brackets);
+ DependentSizedArrayType(QualType(canonElementType.Ty, 0), QualType(),
+ numElements, ASM, elementTypeQuals, brackets);
DependentSizedArrayTypes.InsertNode(canonTy, insertPos);
Types.push_back(canonTy);
}
@@ -3832,10 +3832,8 @@ QualType ASTContext::getDependentSizedArrayType(QualType elementType,
// Otherwise, we need to build a type which follows the spelling
// of the element type.
- auto *sugaredType
- = new (*this, TypeAlignment)
- DependentSizedArrayType(*this, elementType, canon, numElements,
- ASM, elementTypeQuals, brackets);
+ auto *sugaredType = new (*this, TypeAlignment) DependentSizedArrayType(
+ elementType, canon, numElements, ASM, elementTypeQuals, brackets);
Types.push_back(sugaredType);
return QualType(sugaredType, 0);
}
@@ -4111,12 +4109,12 @@ ASTContext::getDependentVectorType(QualType VecType, Expr *SizeExpr,
if (Canon) {
New = new (*this, TypeAlignment) DependentVectorType(
- *this, VecType, QualType(Canon, 0), SizeExpr, AttrLoc, VecKind);
+ VecType, QualType(Canon, 0), SizeExpr, AttrLoc, VecKind);
} else {
QualType CanonVecTy = getCanonicalType(VecType);
if (CanonVecTy == VecType) {
- New = new (*this, TypeAlignment) DependentVectorType(
- *this, VecType, QualType(), SizeExpr, AttrLoc, VecKind);
+ New = new (*this, TypeAlignment)
+ DependentVectorType(VecType, QualType(), SizeExpr, AttrLoc, VecKind);
DependentVectorType *CanonCheck =
DependentVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
@@ -4127,8 +4125,8 @@ ASTContext::getDependentVectorType(QualType VecType, Expr *SizeExpr,
} else {
QualType CanonTy = getDependentVectorType(CanonVecTy, SizeExpr,
SourceLocation(), VecKind);
- New = new (*this, TypeAlignment) DependentVectorType(
- *this, VecType, CanonTy, SizeExpr, AttrLoc, VecKind);
+ New = new (*this, TypeAlignment)
+ DependentVectorType(VecType, CanonTy, SizeExpr, AttrLoc, VecKind);
}
}
@@ -4186,15 +4184,13 @@ ASTContext::getDependentSizedExtVectorType(QualType vecType,
if (Canon) {
// We already have a canonical version of this array type; use it as
// the canonical type for a newly-built type.
- New = new (*this, TypeAlignment)
- DependentSizedExtVectorType(*this, vecType, QualType(Canon, 0),
- SizeExpr, AttrLoc);
+ New = new (*this, TypeAlignment) DependentSizedExtVectorType(
+ vecType, QualType(Canon, 0), SizeExpr, AttrLoc);
} else {
QualType CanonVecTy = getCanonicalType(vecType);
if (CanonVecTy == vecType) {
New = new (*this, TypeAlignment)
- DependentSizedExtVectorType(*this, vecType, QualType(), SizeExpr,
- AttrLoc);
+ DependentSizedExtVectorType(vecType, QualType(), SizeExpr, AttrLoc);
DependentSizedExtVectorType *CanonCheck
= DependentSizedExtVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
@@ -4204,8 +4200,8 @@ ASTContext::getDependentSizedExtVectorType(QualType vecType,
} else {
QualType CanonExtTy = getDependentSizedExtVectorType(CanonVecTy, SizeExpr,
SourceLocation());
- New = new (*this, TypeAlignment) DependentSizedExtVectorType(
- *this, vecType, CanonExtTy, SizeExpr, AttrLoc);
+ New = new (*this, TypeAlignment)
+ DependentSizedExtVectorType(vecType, CanonExtTy, SizeExpr, AttrLoc);
}
}
@@ -4260,7 +4256,7 @@ QualType ASTContext::getDependentSizedMatrixType(QualType ElementTy,
if (!Canon) {
Canon = new (*this, TypeAlignment) DependentSizedMatrixType(
- *this, CanonElementTy, QualType(), RowExpr, ColumnExpr, AttrLoc);
+ CanonElementTy, QualType(), RowExpr, ColumnExpr, AttrLoc);
#ifndef NDEBUG
DependentSizedMatrixType *CanonCheck =
DependentSizedMatrixTypes.FindNodeOrInsertPos(ID, InsertPos);
@@ -4279,7 +4275,7 @@ QualType ASTContext::getDependentSizedMatrixType(QualType ElementTy,
// Use Canon as the canonical type for newly-built type.
DependentSizedMatrixType *New = new (*this, TypeAlignment)
- DependentSizedMatrixType(*this, ElementTy, QualType(Canon, 0), RowExpr,
+ DependentSizedMatrixType(ElementTy, QualType(Canon, 0), RowExpr,
ColumnExpr, AttrLoc);
Types.push_back(New);
return QualType(New, 0);
@@ -4301,9 +4297,8 @@ QualType ASTContext::getDependentAddressSpaceType(QualType PointeeType,
DependentAddressSpaceTypes.FindNodeOrInsertPos(ID, insertPos);
if (!canonTy) {
- canonTy = new (*this, TypeAlignment)
- DependentAddressSpaceType(*this, canonPointeeType,
- QualType(), AddrSpaceExpr, AttrLoc);
+ canonTy = new (*this, TypeAlignment) DependentAddressSpaceType(
+ canonPointeeType, QualType(), AddrSpaceExpr, AttrLoc);
DependentAddressSpaceTypes.InsertNode(canonTy, insertPos);
Types.push_back(canonTy);
}
@@ -4312,10 +4307,8 @@ QualType ASTContext::getDependentAddressSpaceType(QualType PointeeType,
canonTy->getAddrSpaceExpr() == AddrSpaceExpr)
return QualType(canonTy, 0);
- auto *sugaredType
- = new (*this, TypeAlignment)
- DependentAddressSpaceType(*this, PointeeType, QualType(canonTy, 0),
- AddrSpaceExpr, AttrLoc);
+ auto *sugaredType = new (*this, TypeAlignment) DependentAddressSpaceType(
+ PointeeType, QualType(canonTy, 0), AddrSpaceExpr, AttrLoc);
Types.push_back(sugaredType);
return QualType(sugaredType, 0);
}
@@ -4619,8 +4612,8 @@ QualType ASTContext::getDependentBitIntType(bool IsUnsigned,
DependentBitIntTypes.FindNodeOrInsertPos(ID, InsertPos))
return QualType(Existing, 0);
- auto *New = new (*this, TypeAlignment)
- DependentBitIntType(*this, IsUnsigned, NumBitsExpr);
+ auto *New =
+ new (*this, TypeAlignment) DependentBitIntType(IsUnsigned, NumBitsExpr);
DependentBitIntTypes.InsertNode(New, InsertPos);
Types.push_back(New);
@@ -5662,8 +5655,7 @@ QualType ASTContext::getTypeOfExprType(Expr *tofExpr, TypeOfKind Kind) const {
TypeOfExprType(tofExpr, Kind, QualType((TypeOfExprType *)Canon, 0));
} else {
// Build a new, canonical typeof(expr) type.
- Canon = new (*this, TypeAlignment)
- DependentTypeOfExprType(*this, tofExpr, Kind);
+ Canon = new (*this, TypeAlignment) DependentTypeOfExprType(tofExpr, Kind);
DependentTypeOfExprTypes.InsertNode(Canon, InsertPos);
toe = Canon;
}
@@ -5731,7 +5723,7 @@ QualType ASTContext::getDecltypeType(Expr *e, QualType UnderlyingType) const {
= DependentDecltypeTypes.FindNodeOrInsertPos(ID, InsertPos);
if (!Canon) {
// Build a new, canonical decltype(expr) type.
- Canon = new (*this, TypeAlignment) DependentDecltypeType(*this, e);
+ Canon = new (*this, TypeAlignment) DependentDecltypeType(e, DependentTy);
DependentDecltypeTypes.InsertNode(Canon, InsertPos);
}
dt = new (*this, TypeAlignment)
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index c08ebfb7f142b35..4c433f7fe9daca0 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -225,13 +225,12 @@ void ConstantArrayType::Profile(llvm::FoldingSetNodeID &ID,
SizeExpr->Profile(ID, Context, true);
}
-DependentSizedArrayType::DependentSizedArrayType(const ASTContext &Context,
- QualType et, QualType can,
+DependentSizedArrayType::DependentSizedArrayType(QualType et, QualType can,
Expr *e, ArraySizeModifier sm,
unsigned tq,
SourceRange brackets)
- : ArrayType(DependentSizedArray, et, can, sm, tq, e),
- Context(Context), SizeExpr((Stmt*) e), Brackets(brackets) {}
+ : ArrayType(DependentSizedArray, et, can, sm, tq, e), SizeExpr((Stmt *)e),
+ Brackets(brackets) {}
void DependentSizedArrayType::Profile(llvm::FoldingSetNodeID &ID,
const ASTContext &Context,
@@ -245,8 +244,7 @@ void DependentSizedArrayType::Profile(llvm::FoldingSetNodeID &ID,
E->Profile(ID, Context, true);
}
-DependentVectorType::DependentVectorType(const ASTContext &Context,
- QualType ElementType,
+DependentVectorType::DependentVectorType(QualType ElementType,
QualType CanonType, Expr *SizeExpr,
SourceLocation Loc,
VectorType::VectorKind VecKind)
@@ -255,7 +253,7 @@ DependentVectorType::DependentVectorType(const ASTContext &Context,
ElementType->getDependence() |
(SizeExpr ? toTypeDependence(SizeExpr->getDependence())
: TypeDependence::None)),
- Context(Context), ElementType(ElementType), SizeExpr(SizeExpr), Loc(Loc) {
+ ElementType(ElementType), SizeExpr(SizeExpr), Loc(Loc) {
VectorTypeBits.VecKind = VecKind;
}
@@ -268,16 +266,16 @@ void DependentVectorType::Profile(llvm::FoldingSetNodeID &ID,
SizeExpr->Profile(ID, Context, true);
}
-DependentSizedExtVectorType::DependentSizedExtVectorType(
- const ASTContext &Context, QualType ElementType, QualType can,
- Expr *SizeExpr, SourceLocation loc)
+DependentSizedExtVectorType::DependentSizedExtVectorType(QualType ElementType,
+ QualType can,
+ Expr *SizeExpr,
+ SourceLocation loc)
: Type(DependentSizedExtVector, can,
TypeDependence::DependentInstantiation |
ElementType->getDependence() |
(SizeExpr ? toTypeDependence(SizeExpr->getDependence())
: TypeDependence::None)),
- Context(Context), SizeExpr(SizeExpr), ElementType(ElementType), loc(loc) {
-}
+ SizeExpr(SizeExpr), ElementType(ElementType), loc(loc) {}
void
DependentSizedExtVectorType::Profile(llvm::FoldingSetNodeID &ID,
@@ -287,8 +285,7 @@ DependentSizedExtVectorType::Profile(llvm::FoldingSetNodeID &ID,
SizeExpr->Profile(ID, Context, true);
}
-DependentAddressSpaceType::DependentAddressSpaceType(const ASTContext &Context,
- QualType PointeeType,
+DependentAddressSpaceType::DependentAddressSpaceType(QualType PointeeType,
QualType can,
Expr *AddrSpaceExpr,
SourceLocation loc)
@@ -297,8 +294,7 @@ DependentAddressSpaceType::DependentAddressSpaceType(const ASTContext &Context,
PointeeType->getDependence() |
(AddrSpaceExpr ? toTypeDependence(AddrSpaceExpr->getDependence())
: TypeDependence::None)),
- Context(Context), AddrSpaceExpr(AddrSpaceExpr), PointeeType(PointeeType),
- loc(loc) {}
+ AddrSpaceExpr(AddrSpaceExpr), PointeeType(PointeeType), loc(loc) {}
void DependentAddressSpaceType::Profile(llvm::FoldingSetNodeID &ID,
const ASTContext &Context,
@@ -337,12 +333,14 @@ ConstantMatrixType::ConstantMatrixType(TypeClass tc, QualType matrixType,
: MatrixType(tc, matrixType, canonType), NumRows(nRows),
NumColumns(nColumns) {}
-DependentSizedMatrixType::DependentSizedMatrixType(
- const ASTContext &CTX, QualType ElementType, QualType CanonicalType,
- Expr *RowExpr, Expr *ColumnExpr, SourceLocation loc)
+DependentSizedMatrixType::DependentSizedMatrixType(QualType ElementType,
+ QualType CanonicalType,
+ Expr *RowExpr,
+ Expr *ColumnExpr,
+ SourceLocation loc)
: MatrixType(DependentSizedMatrix, ElementType, CanonicalType, RowExpr,
ColumnExpr),
- Context(CTX), RowExpr(RowExpr), ColumnExpr(ColumnExpr), loc(loc) {}
+ RowExpr(RowExpr), ColumnExpr(ColumnExpr), loc(loc) {}
void DependentSizedMatrixType::Profile(llvm::FoldingSetNodeID &ID,
const ASTContext &CTX,
@@ -368,11 +366,10 @@ BitIntType::BitIntType(bool IsUnsigned, unsigned NumBits)
: Type(BitInt, QualType{}, TypeDependence::None), IsUnsigned(IsUnsigned),
NumBits(NumBits) {}
-DependentBitIntType::DependentBitIntType(const ASTContext &Context,
- bool IsUnsigned, Expr *NumBitsExpr)
+DependentBitIntType::DependentBitIntType(bool IsUnsigned, Expr *NumBitsExpr)
: Type(DependentBitInt, QualType{},
toTypeDependence(NumBitsExpr->getDependence())),
- Context(Context), ExprAndUnsigned(NumBitsExpr, IsUnsigned) {}
+ ExprAndUnsigned(NumBitsExpr, IsUnsigned) {}
bool DependentBitIntType::isUnsigned() const {
return ExprAndUnsigned.getInt();
@@ -3726,8 +3723,8 @@ QualType DecltypeType::desugar() const {
return QualType(this, 0);
}
-DependentDecltypeType::DependentDecltypeType(const ASTContext &Context, Expr *E)
- : DecltypeType(E, Context.DependentTy), Context(Context) {}
+DependentDecltypeType::DependentDecltypeType(Expr *E, QualType UnderlyingType)
+ : DecltypeType(E, UnderlyingType) {}
void DependentDecltypeType::Profile(llvm::FoldingSetNodeID &ID,
const ASTContext &Context, Expr *E) {
More information about the cfe-commits
mailing list