[clang] 92b03e4 - [clang][NFC] Format two files with CallingConv switches (#138000)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 30 13:52:10 PDT 2025
Author: Nick Sarnie
Date: 2025-04-30T20:52:07Z
New Revision: 92b03e4f04405bfe55d707ed17a8b6ca89513018
URL: https://github.com/llvm/llvm-project/commit/92b03e4f04405bfe55d707ed17a8b6ca89513018
DIFF: https://github.com/llvm/llvm-project/commit/92b03e4f04405bfe55d707ed17a8b6ca89513018.diff
LOG: [clang][NFC] Format two files with CallingConv switches (#138000)
I'm planning on modifying this code so format it so we can pass the
formatting check.
Signed-off-by: Sarnie, Nick <nick.sarnie at intel.com>
Added:
Modified:
clang/lib/AST/Type.cpp
clang/lib/CodeGen/CGCall.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index d298f1cff73cf..59369fba2e772 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -56,17 +56,17 @@ using namespace clang;
bool Qualifiers::isStrictSupersetOf(Qualifiers Other) const {
return (*this != Other) &&
- // CVR qualifiers superset
- (((Mask & CVRMask) | (Other.Mask & CVRMask)) == (Mask & CVRMask)) &&
- // ObjC GC qualifiers superset
- ((getObjCGCAttr() == Other.getObjCGCAttr()) ||
- (hasObjCGCAttr() && !Other.hasObjCGCAttr())) &&
- // Address space superset.
- ((getAddressSpace() == Other.getAddressSpace()) ||
- (hasAddressSpace()&& !Other.hasAddressSpace())) &&
- // Lifetime qualifier superset.
- ((getObjCLifetime() == Other.getObjCLifetime()) ||
- (hasObjCLifetime() && !Other.hasObjCLifetime()));
+ // CVR qualifiers superset
+ (((Mask & CVRMask) | (Other.Mask & CVRMask)) == (Mask & CVRMask)) &&
+ // ObjC GC qualifiers superset
+ ((getObjCGCAttr() == Other.getObjCGCAttr()) ||
+ (hasObjCGCAttr() && !Other.hasObjCGCAttr())) &&
+ // Address space superset.
+ ((getAddressSpace() == Other.getAddressSpace()) ||
+ (hasAddressSpace() && !Other.hasAddressSpace())) &&
+ // Lifetime qualifier superset.
+ ((getObjCLifetime() == Other.getObjCLifetime()) ||
+ (hasObjCLifetime() && !Other.hasObjCLifetime()));
}
bool Qualifiers::isTargetAddressSpaceSupersetOf(LangAS A, LangAS B,
@@ -105,8 +105,8 @@ bool Qualifiers::isTargetAddressSpaceSupersetOf(LangAS A, LangAS B,
Ctx.getTargetInfo().isAddressSpaceSupersetOf(A, B);
}
-const IdentifierInfo* QualType::getBaseTypeIdentifier() const {
- const Type* ty = getTypePtr();
+const IdentifierInfo *QualType::getBaseTypeIdentifier() const {
+ const Type *ty = getTypePtr();
NamedDecl *ND = nullptr;
if (ty->isPointerOrReferenceType())
return ty->getPointeeType().getBaseTypeIdentifier();
@@ -117,8 +117,9 @@ const IdentifierInfo* QualType::getBaseTypeIdentifier() const {
else if (ty->getTypeClass() == Type::Typedef)
ND = ty->castAs<TypedefType>()->getDecl();
else if (ty->isArrayType())
- return ty->castAsArrayTypeUnsafe()->
- getElementType().getBaseTypeIdentifier();
+ return ty->castAsArrayTypeUnsafe()
+ ->getElementType()
+ .getBaseTypeIdentifier();
if (ND)
return ND->getIdentifier();
@@ -147,7 +148,7 @@ bool QualType::isConstant(QualType T, const ASTContext &Ctx) {
std::optional<QualType::NonConstantStorageReason>
QualType::isNonConstantStorage(const ASTContext &Ctx, bool ExcludeCtor,
- bool ExcludeDtor) {
+ bool ExcludeDtor) {
if (!isConstant(Ctx) && !(*this)->isReferenceType())
return NonConstantStorageReason::NonConstNonReferenceType;
if (!Ctx.getLangOpts().CPlusPlus)
@@ -208,9 +209,10 @@ ConstantArrayType::Create(const ASTContext &Ctx, QualType ET, QualType Can,
ConstantArrayType(ET, Can, SzPtr, SzMod, Qual);
}
-unsigned ConstantArrayType::getNumAddressingBits(const ASTContext &Context,
- QualType ElementType,
- const llvm::APInt &NumElements) {
+unsigned
+ConstantArrayType::getNumAddressingBits(const ASTContext &Context,
+ QualType ElementType,
+ const llvm::APInt &NumElements) {
uint64_t ElementSize = Context.getTypeSizeInChars(ElementType).getQuantity();
// Fast path the common cases so we can avoid the conservative computation
@@ -234,8 +236,8 @@ unsigned ConstantArrayType::getNumAddressingBits(const ASTContext &Context,
// Otherwise, use APSInt to handle arbitrary sized values.
llvm::APSInt SizeExtended(NumElements, true);
unsigned SizeTypeBits = Context.getTypeSize(Context.getSizeType());
- SizeExtended = SizeExtended.extend(std::max(SizeTypeBits,
- SizeExtended.getBitWidth()) * 2);
+ SizeExtended = SizeExtended.extend(
+ std::max(SizeTypeBits, SizeExtended.getBitWidth()) * 2);
llvm::APSInt TotalSize(llvm::APInt(SizeExtended.getBitWidth(), ElementSize));
TotalSize *= SizeExtended;
@@ -285,11 +287,9 @@ DependentSizedArrayType::DependentSizedArrayType(QualType et, QualType can,
: ArrayType(DependentSizedArray, et, can, sm, tq, e), SizeExpr((Stmt *)e) {}
void DependentSizedArrayType::Profile(llvm::FoldingSetNodeID &ID,
- const ASTContext &Context,
- QualType ET,
+ const ASTContext &Context, QualType ET,
ArraySizeModifier SizeMod,
- unsigned TypeQuals,
- Expr *E) {
+ unsigned TypeQuals, Expr *E) {
ID.AddPointer(ET.getAsOpaquePtr());
ID.AddInteger(llvm::to_underlying(SizeMod));
ID.AddInteger(TypeQuals);
@@ -329,10 +329,10 @@ DependentSizedExtVectorType::DependentSizedExtVectorType(QualType ElementType,
: TypeDependence::None)),
SizeExpr(SizeExpr), ElementType(ElementType), loc(loc) {}
-void
-DependentSizedExtVectorType::Profile(llvm::FoldingSetNodeID &ID,
- const ASTContext &Context,
- QualType ElementType, Expr *SizeExpr) {
+void DependentSizedExtVectorType::Profile(llvm::FoldingSetNodeID &ID,
+ const ASTContext &Context,
+ QualType ElementType,
+ Expr *SizeExpr) {
ID.AddPointer(ElementType.getAsOpaquePtr());
SizeExpr->Profile(ID, Context, true);
}
@@ -479,7 +479,8 @@ const Type *Type::getArrayElementTypeNoTypeQual() const {
// If this is a typedef for an array type, strip the typedef off without
// losing all typedef information.
return cast<ArrayType>(getUnqualifiedDesugaredType())
- ->getElementType().getTypePtr();
+ ->getElementType()
+ .getTypePtr();
}
/// getDesugaredType - Return the specified type with any "sugar" removed from
@@ -503,8 +504,8 @@ QualType QualType::getSingleStepDesugaredTypeImpl(QualType type,
// Check that no type class is polymorphic. LLVM style RTTI should be used
// instead. If absolutely needed an exception can still be added here by
// defining the appropriate macro (but please don't do this).
-#define TYPE(CLASS, BASE) \
- static_assert(!std::is_polymorphic<CLASS##Type>::value, \
+#define TYPE(CLASS, BASE) \
+ static_assert(!std::is_polymorphic<CLASS##Type>::value, \
#CLASS "Type should not be polymorphic!");
#include "clang/AST/TypeNodes.inc"
@@ -519,11 +520,12 @@ QualType QualType::getSingleStepDesugaredTypeImpl(QualType type,
QualType Type::getLocallyUnqualifiedSingleStepDesugaredType() const {
switch (getTypeClass()) {
#define ABSTRACT_TYPE(Class, Parent)
-#define TYPE(Class, Parent) \
- case Type::Class: { \
- const auto *ty = cast<Class##Type>(this); \
- if (!ty->isSugared()) return QualType(ty, 0); \
- return ty->desugar(); \
+#define TYPE(Class, Parent) \
+ case Type::Class: { \
+ const auto *ty = cast<Class##Type>(this); \
+ if (!ty->isSugared()) \
+ return QualType(ty, 0); \
+ return ty->desugar(); \
}
#include "clang/AST/TypeNodes.inc"
}
@@ -538,14 +540,14 @@ SplitQualType QualType::getSplitDesugaredType(QualType T) {
const Type *CurTy = Qs.strip(Cur);
switch (CurTy->getTypeClass()) {
#define ABSTRACT_TYPE(Class, Parent)
-#define TYPE(Class, Parent) \
- case Type::Class: { \
- const auto *Ty = cast<Class##Type>(CurTy); \
- if (!Ty->isSugared()) \
- return SplitQualType(Ty, Qs); \
- Cur = Ty->desugar(); \
- break; \
- }
+#define TYPE(Class, Parent) \
+ case Type::Class: { \
+ const auto *Ty = cast<Class##Type>(CurTy); \
+ if (!Ty->isSugared()) \
+ return SplitQualType(Ty, Qs); \
+ Cur = Ty->desugar(); \
+ break; \
+ }
#include "clang/AST/TypeNodes.inc"
}
}
@@ -567,13 +569,14 @@ SplitQualType QualType::getSplitUnqualifiedTypeImpl(QualType type) {
// sugared.
switch (split.Ty->getTypeClass()) {
#define ABSTRACT_TYPE(Class, Parent)
-#define TYPE(Class, Parent) \
- case Type::Class: { \
- const auto *ty = cast<Class##Type>(split.Ty); \
- if (!ty->isSugared()) goto done; \
- next = ty->desugar(); \
- break; \
- }
+#define TYPE(Class, Parent) \
+ case Type::Class: { \
+ const auto *ty = cast<Class##Type>(split.Ty); \
+ if (!ty->isSugared()) \
+ goto done; \
+ next = ty->desugar(); \
+ break; \
+ }
#include "clang/AST/TypeNodes.inc"
}
@@ -586,7 +589,7 @@ SplitQualType QualType::getSplitUnqualifiedTypeImpl(QualType type) {
}
}
- done:
+done:
return SplitQualType(lastTypeWithQuals, quals);
}
@@ -600,19 +603,20 @@ QualType QualType::IgnoreParens(QualType T) {
/// This will check for a T (which should be a Type which can act as
/// sugar, such as a TypedefType) by removing any existing sugar until it
/// reaches a T or a non-sugared type.
-template<typename T> static const T *getAsSugar(const Type *Cur) {
+template <typename T> static const T *getAsSugar(const Type *Cur) {
while (true) {
if (const auto *Sugar = dyn_cast<T>(Cur))
return Sugar;
switch (Cur->getTypeClass()) {
#define ABSTRACT_TYPE(Class, Parent)
-#define TYPE(Class, Parent) \
- case Type::Class: { \
- const auto *Ty = cast<Class##Type>(Cur); \
- if (!Ty->isSugared()) return 0; \
- Cur = Ty->desugar().getTypePtr(); \
- break; \
- }
+#define TYPE(Class, Parent) \
+ case Type::Class: { \
+ const auto *Ty = cast<Class##Type>(Cur); \
+ if (!Ty->isSugared()) \
+ return 0; \
+ Cur = Ty->desugar().getTypePtr(); \
+ break; \
+ }
#include "clang/AST/TypeNodes.inc"
}
}
@@ -651,13 +655,14 @@ const Type *Type::getUnqualifiedDesugaredType() const {
while (true) {
switch (Cur->getTypeClass()) {
#define ABSTRACT_TYPE(Class, Parent)
-#define TYPE(Class, Parent) \
- case Class: { \
- const auto *Ty = cast<Class##Type>(Cur); \
- if (!Ty->isSugared()) return Cur; \
- Cur = Ty->desugar().getTypePtr(); \
- break; \
- }
+#define TYPE(Class, Parent) \
+ case Class: { \
+ const auto *Ty = cast<Class##Type>(Cur); \
+ if (!Ty->isSugared()) \
+ return Cur; \
+ Cur = Ty->desugar().getTypePtr(); \
+ break; \
+ }
#include "clang/AST/TypeNodes.inc"
}
}
@@ -821,8 +826,9 @@ bool Type::isObjCIdOrObjectKindOfType(const ASTContext &ctx,
return false;
// Figure out the type bound for the __kindof type.
- bound = OPT->getObjectType()->stripObjCKindOfTypeAndQuals(ctx)
- ->getAs<ObjCObjectType>();
+ bound = OPT->getObjectType()
+ ->stripObjCKindOfTypeAndQuals(ctx)
+ ->getAs<ObjCObjectType>();
return true;
}
@@ -925,8 +931,8 @@ bool ObjCObjectType::isKindOfType() const {
return false;
}
-QualType ObjCObjectType::stripObjCKindOfTypeAndQuals(
- const ASTContext &ctx) const {
+QualType
+ObjCObjectType::stripObjCKindOfTypeAndQuals(const ASTContext &ctx) const {
if (!isKindOfType() && qual_empty())
return QualType(this, 0);
@@ -936,11 +942,11 @@ QualType ObjCObjectType::stripObjCKindOfTypeAndQuals(
if (const auto *baseObj = splitBaseType.Ty->getAs<ObjCObjectType>())
baseType = baseObj->stripObjCKindOfTypeAndQuals(ctx);
- return ctx.getObjCObjectType(ctx.getQualifiedType(baseType,
- splitBaseType.Quals),
- getTypeArgsAsWritten(),
- /*protocols=*/{},
- /*isKindOf=*/false);
+ return ctx.getObjCObjectType(
+ ctx.getQualifiedType(baseType, splitBaseType.Quals),
+ getTypeArgsAsWritten(),
+ /*protocols=*/{},
+ /*isKindOf=*/false);
}
ObjCInterfaceDecl *ObjCInterfaceType::getDecl() const {
@@ -951,7 +957,7 @@ ObjCInterfaceDecl *ObjCInterfaceType::getDecl() const {
}
const ObjCObjectPointerType *ObjCObjectPointerType::stripObjCKindOfTypeAndQuals(
- const ASTContext &ctx) const {
+ const ASTContext &ctx) const {
if (!isKindOfType() && qual_empty())
return this;
@@ -987,22 +993,22 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
// None of the clients of this transformation can occur where
// there are dependent types, so skip dependent types.
#define TYPE(Class, Base)
-#define DEPENDENT_TYPE(Class, Base) \
+#define DEPENDENT_TYPE(Class, Base) \
QualType Visit##Class##Type(const Class##Type *T) { return QualType(T, 0); }
#include "clang/AST/TypeNodes.inc"
-#define TRIVIAL_TYPE_CLASS(Class) \
+#define TRIVIAL_TYPE_CLASS(Class) \
QualType Visit##Class##Type(const Class##Type *T) { return QualType(T, 0); }
-#define SUGARED_TYPE_CLASS(Class) \
- QualType Visit##Class##Type(const Class##Type *T) { \
- if (!T->isSugared()) \
- return QualType(T, 0); \
- QualType desugaredType = recurse(T->desugar()); \
- if (desugaredType.isNull()) \
- return {}; \
- if (desugaredType.getAsOpaquePtr() == T->desugar().getAsOpaquePtr()) \
- return QualType(T, 0); \
- return desugaredType; \
+#define SUGARED_TYPE_CLASS(Class) \
+ QualType Visit##Class##Type(const Class##Type *T) { \
+ if (!T->isSugared()) \
+ return QualType(T, 0); \
+ QualType desugaredType = recurse(T->desugar()); \
+ if (desugaredType.isNull()) \
+ return {}; \
+ if (desugaredType.getAsOpaquePtr() == T->desugar().getAsOpaquePtr()) \
+ return QualType(T, 0); \
+ return desugaredType; \
}
TRIVIAL_TYPE_CLASS(Builtin)
@@ -1045,8 +1051,8 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (pointeeType.isNull())
return {};
- if (pointeeType.getAsOpaquePtr()
- == T->getPointeeTypeAsWritten().getAsOpaquePtr())
+ if (pointeeType.getAsOpaquePtr() ==
+ T->getPointeeTypeAsWritten().getAsOpaquePtr())
return QualType(T, 0);
return Ctx.getLValueReferenceType(pointeeType, T->isSpelledAsLValue());
@@ -1057,8 +1063,8 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (pointeeType.isNull())
return {};
- if (pointeeType.getAsOpaquePtr()
- == T->getPointeeTypeAsWritten().getAsOpaquePtr())
+ if (pointeeType.getAsOpaquePtr() ==
+ T->getPointeeTypeAsWritten().getAsOpaquePtr())
return QualType(T, 0);
return Ctx.getRValueReferenceType(pointeeType);
@@ -1231,8 +1237,8 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (adjustedType.isNull())
return {};
- if (originalType.getAsOpaquePtr()
- == T->getOriginalType().getAsOpaquePtr() &&
+ if (originalType.getAsOpaquePtr() ==
+ T->getOriginalType().getAsOpaquePtr() &&
adjustedType.getAsOpaquePtr() == T->getAdjustedType().getAsOpaquePtr())
return QualType(T, 0);
@@ -1244,8 +1250,7 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (originalType.isNull())
return {};
- if (originalType.getAsOpaquePtr()
- == T->getOriginalType().getAsOpaquePtr())
+ if (originalType.getAsOpaquePtr() == T->getOriginalType().getAsOpaquePtr())
return QualType(T, 0);
return Ctx.getDecayedType(originalType);
@@ -1278,10 +1283,10 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (equivalentType.isNull())
return {};
- if (modifiedType.getAsOpaquePtr()
- == T->getModifiedType().getAsOpaquePtr() &&
- equivalentType.getAsOpaquePtr()
- == T->getEquivalentType().getAsOpaquePtr())
+ if (modifiedType.getAsOpaquePtr() ==
+ T->getModifiedType().getAsOpaquePtr() &&
+ equivalentType.getAsOpaquePtr() ==
+ T->getEquivalentType().getAsOpaquePtr())
return QualType(T, 0);
return Ctx.getAttributedType(T->getAttrKind(), modifiedType, equivalentType,
@@ -1293,8 +1298,8 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (replacementType.isNull())
return {};
- if (replacementType.getAsOpaquePtr()
- == T->getReplacementType().getAsOpaquePtr())
+ if (replacementType.getAsOpaquePtr() ==
+ T->getReplacementType().getAsOpaquePtr())
return QualType(T, 0);
return Ctx.getSubstTemplateTypeParmType(
@@ -1313,13 +1318,11 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (deducedType.isNull())
return {};
- if (deducedType.getAsOpaquePtr()
- == T->getDeducedType().getAsOpaquePtr())
+ if (deducedType.getAsOpaquePtr() == T->getDeducedType().getAsOpaquePtr())
return QualType(T, 0);
- return Ctx.getAutoType(deducedType, T->getKeyword(),
- T->isDependentType(), /*IsPack=*/false,
- T->getTypeConstraintConcept(),
+ return Ctx.getAutoType(deducedType, T->getKeyword(), T->isDependentType(),
+ /*IsPack=*/false, T->getTypeConstraintConcept(),
T->getTypeConstraintArguments());
}
@@ -1359,8 +1362,7 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (pointeeType.isNull())
return {};
- if (pointeeType.getAsOpaquePtr()
- == T->getPointeeType().getAsOpaquePtr())
+ if (pointeeType.getAsOpaquePtr() == T->getPointeeType().getAsOpaquePtr())
return QualType(T, 0);
return Ctx.getObjCObjectPointerType(pointeeType);
@@ -1371,8 +1373,7 @@ struct SimpleTransformVisitor : public TypeVisitor<Derived, QualType> {
if (valueType.isNull())
return {};
- if (valueType.getAsOpaquePtr()
- == T->getValueType().getAsOpaquePtr())
+ if (valueType.getAsOpaquePtr() == T->getValueType().getAsOpaquePtr())
return QualType(T, 0);
return Ctx.getAtomicType(valueType);
@@ -1409,7 +1410,7 @@ struct SubstObjCTypeArgsVisitor
protocolsVec.append(OTPTy->qual_begin(), OTPTy->qual_end());
ArrayRef<ObjCProtocolDecl *> protocolsToApply = protocolsVec;
return Ctx.applyObjCProtocolQualifiers(
- argType, protocolsToApply, hasError, true/*allowOnPointerType*/);
+ argType, protocolsToApply, hasError, true /*allowOnPointerType*/);
}
switch (SubstContext) {
@@ -1447,7 +1448,7 @@ struct SubstObjCTypeArgsVisitor
// If we have a function type, update the substitution context
// appropriately.
- //Substitute result type.
+ // Substitute result type.
QualType returnType = funcType->getReturnType().substObjCTypeArgs(
Ctx, TypeArgs, ObjCSubstitutionContext::Result);
if (returnType.isNull())
@@ -1721,14 +1722,14 @@ Type::getObjCSubstitutions(const DeclContext *dc) const {
} else if (getAs<BlockPointerType>()) {
ASTContext &ctx = dc->getParentASTContext();
objectType = ctx.getObjCObjectType(ctx.ObjCBuiltinIdTy, {}, {})
- ->castAs<ObjCObjectType>();
+ ->castAs<ObjCObjectType>();
} else {
objectType = getAs<ObjCObjectType>();
}
/// Extract the class from the receiver object type.
- ObjCInterfaceDecl *curClassDecl = objectType ? objectType->getInterface()
- : nullptr;
+ ObjCInterfaceDecl *curClassDecl =
+ objectType ? objectType->getInterface() : nullptr;
if (!curClassDecl) {
// If we don't have a context type (e.g., this is "id" or some
// variant thereof), substitute the bounds.
@@ -1799,7 +1800,7 @@ void ObjCObjectType::computeSuperClassTypeSlow() const {
ObjCTypeParamList *superClassTypeParams = superClassDecl->getTypeParamList();
if (!superClassTypeParams) {
CachedSuperClassType.setPointerAndInt(
- superClassType->castAs<ObjCObjectType>(), true);
+ superClassType->castAs<ObjCObjectType>(), true);
return;
}
@@ -1814,19 +1815,18 @@ void ObjCObjectType::computeSuperClassTypeSlow() const {
ObjCTypeParamList *typeParams = classDecl->getTypeParamList();
if (!typeParams) {
CachedSuperClassType.setPointerAndInt(
- superClassType->castAs<ObjCObjectType>(), true);
+ superClassType->castAs<ObjCObjectType>(), true);
return;
}
// If the subclass type isn't specialized, return the unspecialized
// superclass.
if (isUnspecialized()) {
- QualType unspecializedSuper
- = classDecl->getASTContext().getObjCInterfaceType(
- superClassObjTy->getInterface());
+ QualType unspecializedSuper =
+ classDecl->getASTContext().getObjCInterfaceType(
+ superClassObjTy->getInterface());
CachedSuperClassType.setPointerAndInt(
- unspecializedSuper->castAs<ObjCObjectType>(),
- true);
+ unspecializedSuper->castAs<ObjCObjectType>(), true);
return;
}
@@ -1834,16 +1834,18 @@ void ObjCObjectType::computeSuperClassTypeSlow() const {
ArrayRef<QualType> typeArgs = getTypeArgs();
assert(typeArgs.size() == typeParams->size());
CachedSuperClassType.setPointerAndInt(
- superClassType.substObjCTypeArgs(classDecl->getASTContext(), typeArgs,
- ObjCSubstitutionContext::Superclass)
- ->castAs<ObjCObjectType>(),
- true);
+ superClassType
+ .substObjCTypeArgs(classDecl->getASTContext(), typeArgs,
+ ObjCSubstitutionContext::Superclass)
+ ->castAs<ObjCObjectType>(),
+ true);
}
const ObjCInterfaceType *ObjCObjectPointerType::getInterfaceType() const {
if (auto interfaceDecl = getObjectType()->getInterface()) {
- return interfaceDecl->getASTContext().getObjCInterfaceType(interfaceDecl)
- ->castAs<ObjCInterfaceType>();
+ return interfaceDecl->getASTContext()
+ .getObjCInterfaceType(interfaceDecl)
+ ->castAs<ObjCInterfaceType>();
}
return nullptr;
@@ -1960,103 +1962,100 @@ bool Type::hasAttr(attr::Kind AK) const {
namespace {
- class GetContainedDeducedTypeVisitor :
- public TypeVisitor<GetContainedDeducedTypeVisitor, Type*> {
- bool Syntactic;
+class GetContainedDeducedTypeVisitor
+ : public TypeVisitor<GetContainedDeducedTypeVisitor, Type *> {
+ bool Syntactic;
- public:
- GetContainedDeducedTypeVisitor(bool Syntactic = false)
- : Syntactic(Syntactic) {}
+public:
+ GetContainedDeducedTypeVisitor(bool Syntactic = false)
+ : Syntactic(Syntactic) {}
- using TypeVisitor<GetContainedDeducedTypeVisitor, Type*>::Visit;
+ using TypeVisitor<GetContainedDeducedTypeVisitor, Type *>::Visit;
- Type *Visit(QualType T) {
- if (T.isNull())
- return nullptr;
- return Visit(T.getTypePtr());
- }
+ Type *Visit(QualType T) {
+ if (T.isNull())
+ return nullptr;
+ return Visit(T.getTypePtr());
+ }
- // The deduced type itself.
- Type *VisitDeducedType(const DeducedType *AT) {
- return const_cast<DeducedType*>(AT);
- }
+ // The deduced type itself.
+ Type *VisitDeducedType(const DeducedType *AT) {
+ return const_cast<DeducedType *>(AT);
+ }
- // Only these types can contain the desired 'auto' type.
- Type *VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *T) {
- return Visit(T->getReplacementType());
- }
+ // Only these types can contain the desired 'auto' type.
+ Type *VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *T) {
+ return Visit(T->getReplacementType());
+ }
- Type *VisitElaboratedType(const ElaboratedType *T) {
- return Visit(T->getNamedType());
- }
+ Type *VisitElaboratedType(const ElaboratedType *T) {
+ return Visit(T->getNamedType());
+ }
- Type *VisitPointerType(const PointerType *T) {
- return Visit(T->getPointeeType());
- }
+ Type *VisitPointerType(const PointerType *T) {
+ return Visit(T->getPointeeType());
+ }
- Type *VisitBlockPointerType(const BlockPointerType *T) {
- return Visit(T->getPointeeType());
- }
+ Type *VisitBlockPointerType(const BlockPointerType *T) {
+ return Visit(T->getPointeeType());
+ }
- Type *VisitReferenceType(const ReferenceType *T) {
- return Visit(T->getPointeeTypeAsWritten());
- }
+ Type *VisitReferenceType(const ReferenceType *T) {
+ return Visit(T->getPointeeTypeAsWritten());
+ }
- Type *VisitMemberPointerType(const MemberPointerType *T) {
- return Visit(T->getPointeeType());
- }
+ Type *VisitMemberPointerType(const MemberPointerType *T) {
+ return Visit(T->getPointeeType());
+ }
- Type *VisitArrayType(const ArrayType *T) {
- return Visit(T->getElementType());
- }
+ Type *VisitArrayType(const ArrayType *T) {
+ return Visit(T->getElementType());
+ }
- Type *VisitDependentSizedExtVectorType(
- const DependentSizedExtVectorType *T) {
- return Visit(T->getElementType());
- }
+ Type *VisitDependentSizedExtVectorType(const DependentSizedExtVectorType *T) {
+ return Visit(T->getElementType());
+ }
- Type *VisitVectorType(const VectorType *T) {
- return Visit(T->getElementType());
- }
+ Type *VisitVectorType(const VectorType *T) {
+ return Visit(T->getElementType());
+ }
- Type *VisitDependentSizedMatrixType(const DependentSizedMatrixType *T) {
- return Visit(T->getElementType());
- }
+ Type *VisitDependentSizedMatrixType(const DependentSizedMatrixType *T) {
+ return Visit(T->getElementType());
+ }
- Type *VisitConstantMatrixType(const ConstantMatrixType *T) {
- return Visit(T->getElementType());
- }
+ Type *VisitConstantMatrixType(const ConstantMatrixType *T) {
+ return Visit(T->getElementType());
+ }
- Type *VisitFunctionProtoType(const FunctionProtoType *T) {
- if (Syntactic && T->hasTrailingReturn())
- return const_cast<FunctionProtoType*>(T);
- return VisitFunctionType(T);
- }
+ Type *VisitFunctionProtoType(const FunctionProtoType *T) {
+ if (Syntactic && T->hasTrailingReturn())
+ return const_cast<FunctionProtoType *>(T);
+ return VisitFunctionType(T);
+ }
- Type *VisitFunctionType(const FunctionType *T) {
- return Visit(T->getReturnType());
- }
+ Type *VisitFunctionType(const FunctionType *T) {
+ return Visit(T->getReturnType());
+ }
- Type *VisitParenType(const ParenType *T) {
- return Visit(T->getInnerType());
- }
+ Type *VisitParenType(const ParenType *T) { return Visit(T->getInnerType()); }
- Type *VisitAttributedType(const AttributedType *T) {
- return Visit(T->getModifiedType());
- }
+ Type *VisitAttributedType(const AttributedType *T) {
+ return Visit(T->getModifiedType());
+ }
- Type *VisitMacroQualifiedType(const MacroQualifiedType *T) {
- return Visit(T->getUnderlyingType());
- }
+ Type *VisitMacroQualifiedType(const MacroQualifiedType *T) {
+ return Visit(T->getUnderlyingType());
+ }
- Type *VisitAdjustedType(const AdjustedType *T) {
- return Visit(T->getOriginalType());
- }
+ Type *VisitAdjustedType(const AdjustedType *T) {
+ return Visit(T->getOriginalType());
+ }
- Type *VisitPackExpansionType(const PackExpansionType *T) {
- return Visit(T->getPattern());
- }
- };
+ Type *VisitPackExpansionType(const PackExpansionType *T) {
+ return Visit(T->getPattern());
+ }
+};
} // namespace
@@ -2176,9 +2175,11 @@ bool Type::isChar32Type() const {
/// types.
bool Type::isAnyCharacterType() const {
const auto *BT = dyn_cast<BuiltinType>(CanonicalType);
- if (!BT) return false;
+ if (!BT)
+ return false;
switch (BT->getKind()) {
- default: return false;
+ default:
+ return false;
case BuiltinType::Char_U:
case BuiltinType::UChar:
case BuiltinType::WChar_U:
@@ -2269,7 +2270,7 @@ bool Type::isUnsignedIntegerType() const {
bool Type::isUnsignedIntegerOrEnumerationType() const {
if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType)) {
return BT->getKind() >= BuiltinType::Bool &&
- BT->getKind() <= BuiltinType::UInt128;
+ BT->getKind() <= BuiltinType::UInt128;
}
if (const auto *ET = dyn_cast<EnumType>(CanonicalType)) {
@@ -2326,7 +2327,7 @@ bool Type::isRealType() const {
return BT->getKind() >= BuiltinType::Bool &&
BT->getKind() <= BuiltinType::Ibm128;
if (const auto *ET = dyn_cast<EnumType>(CanonicalType))
- return ET->getDecl()->isComplete() && !ET->getDecl()->isScoped();
+ return ET->getDecl()->isComplete() && !ET->getDecl()->isScoped();
return isBitIntType();
}
@@ -2362,11 +2363,16 @@ Type::ScalarTypeKind Type::getScalarTypeKind() const {
const Type *T = CanonicalType.getTypePtr();
if (const auto *BT = dyn_cast<BuiltinType>(T)) {
- if (BT->getKind() == BuiltinType::Bool) return STK_Bool;
- if (BT->getKind() == BuiltinType::NullPtr) return STK_CPointer;
- if (BT->isInteger()) return STK_Integral;
- if (BT->isFloatingPoint()) return STK_Floating;
- if (BT->isFixedPointType()) return STK_FixedPoint;
+ if (BT->getKind() == BuiltinType::Bool)
+ return STK_Bool;
+ if (BT->getKind() == BuiltinType::NullPtr)
+ return STK_CPointer;
+ if (BT->isInteger())
+ return STK_Integral;
+ if (BT->isFloatingPoint())
+ return STK_Floating;
+ if (BT->isFixedPointType())
+ return STK_FixedPoint;
llvm_unreachable("unknown scalar builtin type");
} else if (isa<PointerType>(T)) {
return STK_CPointer;
@@ -2428,7 +2434,8 @@ bool Type::isIncompleteType(NamedDecl **Def) const {
*Def = nullptr;
switch (CanonicalType->getTypeClass()) {
- default: return false;
+ default:
+ return false;
case Builtin:
// Void is the only incomplete builtin type. Per C99 6.2.5p19, it can never
// be completed.
@@ -2461,8 +2468,9 @@ bool Type::isIncompleteType(NamedDecl **Def) const {
// (C++ [dcl.array]p1).
// We don't handle dependent-sized arrays (dependent types are never treated
// as incomplete).
- return cast<ArrayType>(CanonicalType)->getElementType()
- ->isIncompleteType(Def);
+ return cast<ArrayType>(CanonicalType)
+ ->getElementType()
+ ->isIncompleteType(Def);
case IncompleteArray:
// An array of unknown size is an incomplete type (C99 6.2.5p22).
return true;
@@ -2487,12 +2495,13 @@ bool Type::isIncompleteType(NamedDecl **Def) const {
return true;
}
case ObjCObject:
- return cast<ObjCObjectType>(CanonicalType)->getBaseType()
- ->isIncompleteType(Def);
+ return cast<ObjCObjectType>(CanonicalType)
+ ->getBaseType()
+ ->isIncompleteType(Def);
case ObjCInterface: {
// ObjC interfaces are incomplete if they are @class, not @interface.
- ObjCInterfaceDecl *Interface
- = cast<ObjCInterfaceType>(CanonicalType)->getDecl();
+ ObjCInterfaceDecl *Interface =
+ cast<ObjCInterfaceType>(CanonicalType)->getDecl();
if (Def)
*Def = Interface;
return !Interface->hasDefinition();
@@ -2707,7 +2716,8 @@ bool QualType::isCXX98PODType(const ASTContext &Context) const {
QualType CanonicalType = getTypePtr()->CanonicalType;
switch (CanonicalType->getTypeClass()) {
// Everything not explicitly mentioned is not POD.
- default: return false;
+ default:
+ return false;
case Type::VariableArray:
case Type::ConstantArray:
// IncompleteArray is handled above.
@@ -2915,7 +2925,8 @@ bool QualType::isNonWeakInMRRWithObjCWeak(const ASTContext &Context) const {
getObjCLifetime() != Qualifiers::OCL_Weak;
}
-bool QualType::hasNonTrivialToPrimitiveDefaultInitializeCUnion(const RecordDecl *RD) {
+bool QualType::hasNonTrivialToPrimitiveDefaultInitializeCUnion(
+ const RecordDecl *RD) {
return RD->hasNonTrivialToPrimitiveDefaultInitializeCUnion();
}
@@ -3079,7 +3090,8 @@ bool Type::isStandardLayoutType() const {
return false;
// As an extension, Clang treats vector types as Scalar types.
- if (BaseTy->isScalarType() || BaseTy->isVectorType()) return true;
+ if (BaseTy->isScalarType() || BaseTy->isVectorType())
+ return true;
if (const auto *RT = BaseTy->getAs<RecordType>()) {
if (const auto *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl()))
if (!ClassDecl->isStandardLayout())
@@ -3121,17 +3133,20 @@ bool QualType::isCXX11PODType(const ASTContext &Context) const {
return false;
// As an extension, Clang treats vector types as Scalar types.
- if (BaseTy->isScalarType() || BaseTy->isVectorType()) return true;
+ if (BaseTy->isScalarType() || BaseTy->isVectorType())
+ return true;
if (const auto *RT = BaseTy->getAs<RecordType>()) {
if (const auto *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) {
// C++11 [class]p10:
// A POD struct is a non-union class that is both a trivial class [...]
- if (!ClassDecl->isTrivial()) return false;
+ if (!ClassDecl->isTrivial())
+ return false;
// C++11 [class]p10:
// A POD struct is a non-union class that is both a trivial class and
// a standard-layout class [...]
- if (!ClassDecl->isStandardLayout()) return false;
+ if (!ClassDecl->isStandardLayout())
+ return false;
// C++11 [class]p10:
// A POD struct is a non-union class that is both a trivial class and
@@ -3221,9 +3236,8 @@ TypeWithKeyword::getKeywordForTypeSpec(unsigned TypeSpec) {
}
}
-TagTypeKind
-TypeWithKeyword::getTagTypeKindForTypeSpec(unsigned TypeSpec) {
- switch(TypeSpec) {
+TagTypeKind TypeWithKeyword::getTagTypeKindForTypeSpec(unsigned TypeSpec) {
+ switch (TypeSpec) {
case TST_class:
return TagTypeKind::Class;
case TST_struct:
@@ -3276,8 +3290,7 @@ TypeWithKeyword::getTagTypeKindForKeyword(ElaboratedTypeKeyword Keyword) {
llvm_unreachable("Unknown elaborated type keyword.");
}
-bool
-TypeWithKeyword::KeywordIsTagTypeKind(ElaboratedTypeKeyword Keyword) {
+bool TypeWithKeyword::KeywordIsTagTypeKind(ElaboratedTypeKeyword Keyword) {
switch (Keyword) {
case ElaboratedTypeKeyword::None:
case ElaboratedTypeKeyword::Typename:
@@ -3358,7 +3371,9 @@ bool Type::isElaboratedTypeSpecifier() const {
const char *Type::getTypeClassName() const {
switch (TypeBits.TC) {
#define ABSTRACT_TYPE(Derived, Base)
-#define TYPE(Derived, Base) case Derived: return #Derived;
+#define TYPE(Derived, Base) \
+ case Derived: \
+ return #Derived;
#include "clang/AST/TypeNodes.inc"
}
@@ -3496,8 +3511,8 @@ StringRef BuiltinType::getName(const PrintingPolicy &Policy) const {
return "Class";
case ObjCSel:
return "SEL";
-#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
- case Id: \
+#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
+ case Id: \
return "__" #Access " " #ImgType "_t";
#include "clang/Basic/OpenCLImageTypes.def"
case OCLSampler:
@@ -3518,16 +3533,16 @@ StringRef BuiltinType::getName(const PrintingPolicy &Policy) const {
return "<OpenMP array shaping type>";
case OMPIterator:
return "<OpenMP iterator type>";
-#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
- case Id: \
+#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
+ case Id: \
return #ExtType;
#include "clang/Basic/OpenCLExtensionTypes.def"
#define SVE_TYPE(Name, Id, SingletonId) \
case Id: \
return #Name;
#include "clang/Basic/AArch64SVEACLETypes.def"
-#define PPC_VECTOR_TYPE(Name, Id, Size) \
- case Id: \
+#define PPC_VECTOR_TYPE(Name, Id, Size) \
+ case Id: \
return #Name;
#include "clang/Basic/PPCTypes.def"
#define RVV_TYPE(Name, Id, SingletonId) \
@@ -3576,29 +3591,52 @@ QualType QualType::getNonLValueExprType(const ASTContext &Context) const {
StringRef FunctionType::getNameForCallConv(CallingConv CC) {
switch (CC) {
- case CC_C: return "cdecl";
- case CC_X86StdCall: return "stdcall";
- case CC_X86FastCall: return "fastcall";
- case CC_X86ThisCall: return "thiscall";
- case CC_X86Pascal: return "pascal";
- case CC_X86VectorCall: return "vectorcall";
- case CC_Win64: return "ms_abi";
- case CC_X86_64SysV: return "sysv_abi";
- case CC_X86RegCall : return "regcall";
- case CC_AAPCS: return "aapcs";
- case CC_AAPCS_VFP: return "aapcs-vfp";
- case CC_AArch64VectorCall: return "aarch64_vector_pcs";
- case CC_AArch64SVEPCS: return "aarch64_sve_pcs";
- case CC_AMDGPUKernelCall: return "amdgpu_kernel";
- case CC_IntelOclBicc: return "intel_ocl_bicc";
- case CC_SpirFunction: return "spir_function";
- case CC_OpenCLKernel: return "opencl_kernel";
- case CC_Swift: return "swiftcall";
- case CC_SwiftAsync: return "swiftasynccall";
- case CC_PreserveMost: return "preserve_most";
- case CC_PreserveAll: return "preserve_all";
- case CC_M68kRTD: return "m68k_rtd";
- case CC_PreserveNone: return "preserve_none";
+ case CC_C:
+ return "cdecl";
+ case CC_X86StdCall:
+ return "stdcall";
+ case CC_X86FastCall:
+ return "fastcall";
+ case CC_X86ThisCall:
+ return "thiscall";
+ case CC_X86Pascal:
+ return "pascal";
+ case CC_X86VectorCall:
+ return "vectorcall";
+ case CC_Win64:
+ return "ms_abi";
+ case CC_X86_64SysV:
+ return "sysv_abi";
+ case CC_X86RegCall:
+ return "regcall";
+ case CC_AAPCS:
+ return "aapcs";
+ case CC_AAPCS_VFP:
+ return "aapcs-vfp";
+ case CC_AArch64VectorCall:
+ return "aarch64_vector_pcs";
+ case CC_AArch64SVEPCS:
+ return "aarch64_sve_pcs";
+ case CC_AMDGPUKernelCall:
+ return "amdgpu_kernel";
+ case CC_IntelOclBicc:
+ return "intel_ocl_bicc";
+ case CC_SpirFunction:
+ return "spir_function";
+ case CC_OpenCLKernel:
+ return "opencl_kernel";
+ case CC_Swift:
+ return "swiftcall";
+ case CC_SwiftAsync:
+ return "swiftasynccall";
+ case CC_PreserveMost:
+ return "preserve_most";
+ case CC_PreserveAll:
+ return "preserve_all";
+ case CC_M68kRTD:
+ return "m68k_rtd";
+ case CC_PreserveNone:
+ return "preserve_none";
// clang-format off
case CC_RISCVVectorCall: return "riscv_vector_cc";
#define CC_VLS_CASE(ABI_VLEN) \
@@ -3882,12 +3920,10 @@ void FunctionProtoType::Profile(llvm::FoldingSetNodeID &ID, QualType Result,
// This method is relatively performance sensitive, so as a performance
// shortcut, use one AddInteger call instead of four for the next four
// fields.
- assert(!(unsigned(epi.Variadic) & ~1) &&
- !(unsigned(epi.RefQualifier) & ~3) &&
+ assert(!(unsigned(epi.Variadic) & ~1) && !(unsigned(epi.RefQualifier) & ~3) &&
!(unsigned(epi.ExceptionSpec.Type) & ~15) &&
"Values larger than expected.");
- ID.AddInteger(unsigned(epi.Variadic) +
- (epi.RefQualifier << 1) +
+ ID.AddInteger(unsigned(epi.Variadic) + (epi.RefQualifier << 1) +
(epi.ExceptionSpec.Type << 3));
ID.Add(epi.TypeQuals);
if (epi.ExceptionSpec.Type == EST_Dynamic) {
@@ -4047,9 +4083,7 @@ TypeOfExprType::TypeOfExprType(const ASTContext &Context, Expr *E,
TypeOfBits.Kind = static_cast<unsigned>(Kind);
}
-bool TypeOfExprType::isSugared() const {
- return !TOExpr->isTypeDependent();
-}
+bool TypeOfExprType::isSugared() const { return !TOExpr->isTypeDependent(); }
QualType TypeOfExprType::desugar() const {
if (isSugared()) {
@@ -4194,16 +4228,12 @@ static TagDecl *getInterestingTagDecl(TagDecl *decl) {
return decl;
}
-TagDecl *TagType::getDecl() const {
- return getInterestingTagDecl(decl);
-}
+TagDecl *TagType::getDecl() const { return getInterestingTagDecl(decl); }
-bool TagType::isBeingDefined() const {
- return getDecl()->isBeingDefined();
-}
+bool TagType::isBeingDefined() const { return getDecl()->isBeingDefined(); }
bool RecordType::hasConstFields() const {
- std::vector<const RecordType*> RecordTypeList;
+ std::vector<const RecordType *> RecordTypeList;
RecordTypeList.push_back(this);
unsigned NextToCheckIndex = 0;
@@ -4264,7 +4294,8 @@ bool AttributedType::isQualifier() const {
bool AttributedType::isMSTypeSpec() const {
// FIXME: Generate this with TableGen?
switch (getAttrKind()) {
- default: return false;
+ default:
+ return false;
case attr::Ptr32:
case attr::Ptr64:
case attr::SPtr:
@@ -4281,7 +4312,8 @@ bool AttributedType::isWebAssemblyFuncrefSpec() const {
bool AttributedType::isCallingConv() const {
// FIXME: Generate this with TableGen.
switch (getAttrKind()) {
- default: return false;
+ default:
+ return false;
case attr::Pcs:
case attr::CDecl:
case attr::FastCall:
@@ -4413,7 +4445,8 @@ void SubstTemplateTypeParmPackType::Profile(llvm::FoldingSetNodeID &ID,
}
bool TemplateSpecializationType::anyDependentTemplateArguments(
- const TemplateArgumentListInfo &Args, ArrayRef<TemplateArgument> Converted) {
+ const TemplateArgumentListInfo &Args,
+ ArrayRef<TemplateArgument> Converted) {
return anyDependentTemplateArguments(Args.arguments(), Converted);
}
@@ -4426,7 +4459,7 @@ bool TemplateSpecializationType::anyDependentTemplateArguments(
}
bool TemplateSpecializationType::anyInstantiationDependentTemplateArguments(
- ArrayRef<TemplateArgumentLoc> Args) {
+ ArrayRef<TemplateArgumentLoc> Args) {
for (const TemplateArgumentLoc &ArgLoc : Args) {
if (ArgLoc.getArgument().isInstantiationDependent())
return true;
@@ -4509,24 +4542,23 @@ void TemplateSpecializationType::Profile(llvm::FoldingSetNodeID &ID,
Arg.Profile(ID, Context);
}
-QualType
-QualifierCollector::apply(const ASTContext &Context, QualType QT) const {
+QualType QualifierCollector::apply(const ASTContext &Context,
+ QualType QT) const {
if (!hasNonFastQualifiers())
return QT.withFastQualifiers(getFastQualifiers());
return Context.getQualifiedType(QT, *this);
}
-QualType
-QualifierCollector::apply(const ASTContext &Context, const Type *T) const {
+QualType QualifierCollector::apply(const ASTContext &Context,
+ const Type *T) const {
if (!hasNonFastQualifiers())
return QualType(T, getFastQualifiers());
return Context.getQualifiedType(T, *this);
}
-void ObjCObjectTypeImpl::Profile(llvm::FoldingSetNodeID &ID,
- QualType BaseType,
+void ObjCObjectTypeImpl::Profile(llvm::FoldingSetNodeID &ID, QualType BaseType,
ArrayRef<QualType> typeArgs,
ArrayRef<ObjCProtocolDecl *> protocols,
bool isKindOf) {
@@ -4593,9 +4625,7 @@ namespace clang {
/// leakage.
template <class Private> class TypePropertyCache {
public:
- static CachedProperties get(QualType T) {
- return get(T.getTypePtr());
- }
+ static CachedProperties get(QualType T) { return get(T.getTypePtr()); }
static CachedProperties get(const Type *T) {
ensure(T);
@@ -4605,7 +4635,8 @@ template <class Private> class TypePropertyCache {
static void ensure(const Type *T) {
// If the cache is valid, we're okay.
- if (T->TypeBits.isCacheValid()) return;
+ if (T->TypeBits.isCacheValid())
+ return;
// If this type is non-canonical, ask its canonical type for the
// relevant information.
@@ -4641,14 +4672,14 @@ using Cache = TypePropertyCache<Private>;
static CachedProperties computeCachedProperties(const Type *T) {
switch (T->getTypeClass()) {
-#define TYPE(Class,Base)
-#define NON_CANONICAL_TYPE(Class,Base) case Type::Class:
+#define TYPE(Class, Base)
+#define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
#include "clang/AST/TypeNodes.inc"
llvm_unreachable("didn't expect a non-canonical type here");
-#define TYPE(Class,Base)
-#define DEPENDENT_TYPE(Class,Base) case Type::Class:
-#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class,Base) case Type::Class:
+#define TYPE(Class, Base)
+#define DEPENDENT_TYPE(Class, Base) case Type::Class:
+#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
#include "clang/AST/TypeNodes.inc"
// Treat instantiation-dependent types as external.
assert(T->isInstantiationDependentType());
@@ -4676,9 +4707,8 @@ static CachedProperties computeCachedProperties(const Type *T) {
// for linkage purposes (7.1.3)) and the name has linkage; or
// - it is a specialization of a class template (14); or
Linkage L = Tag->getLinkageInternal();
- bool IsLocalOrUnnamed =
- Tag->getDeclContext()->isFunctionOrMethod() ||
- !Tag->hasNameForLinkage();
+ bool IsLocalOrUnnamed = Tag->getDeclContext()->isFunctionOrMethod() ||
+ !Tag->hasNameForLinkage();
return CachedProperties(L, IsLocalOrUnnamed);
}
@@ -4757,14 +4787,14 @@ bool Type::hasUnnamedOrLocalType() const {
LinkageInfo LinkageComputer::computeTypeLinkageInfo(const Type *T) {
switch (T->getTypeClass()) {
-#define TYPE(Class,Base)
-#define NON_CANONICAL_TYPE(Class,Base) case Type::Class:
+#define TYPE(Class, Base)
+#define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
#include "clang/AST/TypeNodes.inc"
llvm_unreachable("didn't expect a non-canonical type here");
-#define TYPE(Class,Base)
-#define DEPENDENT_TYPE(Class,Base) case Type::Class:
-#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class,Base) case Type::Class:
+#define TYPE(Class, Base)
+#define DEPENDENT_TYPE(Class, Base) case Type::Class:
+#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
#include "clang/AST/TypeNodes.inc"
// Treat instantiation-dependent types as external.
assert(T->isInstantiationDependentType());
@@ -4882,9 +4912,9 @@ bool Type::canHaveNullability(bool ResultIfUnknown) const {
QualType type = getCanonicalTypeInternal();
switch (type->getTypeClass()) {
- // We'll only see canonical types here.
-#define NON_CANONICAL_TYPE(Class, Parent) \
- case Type::Class: \
+ // We'll only see canonical types here.
+#define NON_CANONICAL_TYPE(Class, Parent) \
+ case Type::Class: \
llvm_unreachable("non-canonical type");
#define TYPE(Class, Parent)
#include "clang/AST/TypeNodes.inc"
@@ -4948,22 +4978,19 @@ bool Type::canHaveNullability(bool ResultIfUnknown) const {
case BuiltinType::ObjCId:
case BuiltinType::ObjCClass:
case BuiltinType::ObjCSel:
-#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
- case BuiltinType::Id:
+#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
+ case BuiltinType::Id:
#include "clang/Basic/OpenCLImageTypes.def"
-#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
- case BuiltinType::Id:
+#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) case BuiltinType::Id:
#include "clang/Basic/OpenCLExtensionTypes.def"
case BuiltinType::OCLSampler:
case BuiltinType::OCLEvent:
case BuiltinType::OCLClkEvent:
case BuiltinType::OCLQueue:
case BuiltinType::OCLReserveID:
-#define SVE_TYPE(Name, Id, SingletonId) \
- case BuiltinType::Id:
+#define SVE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/AArch64SVEACLETypes.def"
-#define PPC_VECTOR_TYPE(Name, Id, Size) \
- case BuiltinType::Id:
+#define PPC_VECTOR_TYPE(Name, Id, Size) case BuiltinType::Id:
#include "clang/Basic/PPCTypes.def"
#define RVV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/RISCVVTypes.def"
@@ -5131,8 +5158,7 @@ bool Type::isObjCIndependentClassType() const {
}
bool Type::isObjCRetainableType() const {
- return isObjCObjectPointerType() ||
- isBlockPointerType() ||
+ return isObjCObjectPointerType() || isBlockPointerType() ||
isObjCNSObjectType();
}
@@ -5188,7 +5214,8 @@ bool Type::isCUDADeviceBuiltinTextureType() const {
}
bool Type::hasSizedVLAType() const {
- if (!isVariablyModifiedType()) return false;
+ if (!isVariablyModifiedType())
+ return false;
if (const auto *ptr = getAs<PointerType>())
return ptr->getPointeeType()->hasSizedVLAType();
@@ -5245,8 +5272,7 @@ QualType::DestructionKind QualType::isDestructedTypeImpl(QualType type) {
return DK_objc_weak_lifetime;
}
- if (const auto *RT =
- type->getBaseElementTypeUnsafe()->getAs<RecordType>()) {
+ if (const auto *RT = type->getBaseElementTypeUnsafe()->getAs<RecordType>()) {
const RecordDecl *RD = RT->getDecl();
if (const auto *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
/// Check if this is a C++ object with a non-trivial destructor.
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index c7fbbbc6fd40d..83b0e8e965770 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -50,31 +50,54 @@ using namespace CodeGen;
unsigned CodeGenTypes::ClangCallConvToLLVMCallConv(CallingConv CC) {
switch (CC) {
- default: return llvm::CallingConv::C;
- case CC_X86StdCall: return llvm::CallingConv::X86_StdCall;
- case CC_X86FastCall: return llvm::CallingConv::X86_FastCall;
- case CC_X86RegCall: return llvm::CallingConv::X86_RegCall;
- case CC_X86ThisCall: return llvm::CallingConv::X86_ThisCall;
- case CC_Win64: return llvm::CallingConv::Win64;
- case CC_X86_64SysV: return llvm::CallingConv::X86_64_SysV;
- case CC_AAPCS: return llvm::CallingConv::ARM_AAPCS;
- case CC_AAPCS_VFP: return llvm::CallingConv::ARM_AAPCS_VFP;
- case CC_IntelOclBicc: return llvm::CallingConv::Intel_OCL_BI;
+ default:
+ return llvm::CallingConv::C;
+ case CC_X86StdCall:
+ return llvm::CallingConv::X86_StdCall;
+ case CC_X86FastCall:
+ return llvm::CallingConv::X86_FastCall;
+ case CC_X86RegCall:
+ return llvm::CallingConv::X86_RegCall;
+ case CC_X86ThisCall:
+ return llvm::CallingConv::X86_ThisCall;
+ case CC_Win64:
+ return llvm::CallingConv::Win64;
+ case CC_X86_64SysV:
+ return llvm::CallingConv::X86_64_SysV;
+ case CC_AAPCS:
+ return llvm::CallingConv::ARM_AAPCS;
+ case CC_AAPCS_VFP:
+ return llvm::CallingConv::ARM_AAPCS_VFP;
+ case CC_IntelOclBicc:
+ return llvm::CallingConv::Intel_OCL_BI;
// TODO: Add support for __pascal to LLVM.
- case CC_X86Pascal: return llvm::CallingConv::C;
+ case CC_X86Pascal:
+ return llvm::CallingConv::C;
// TODO: Add support for __vectorcall to LLVM.
- case CC_X86VectorCall: return llvm::CallingConv::X86_VectorCall;
- case CC_AArch64VectorCall: return llvm::CallingConv::AArch64_VectorCall;
- case CC_AArch64SVEPCS: return llvm::CallingConv::AArch64_SVE_VectorCall;
- case CC_AMDGPUKernelCall: return llvm::CallingConv::AMDGPU_KERNEL;
- case CC_SpirFunction: return llvm::CallingConv::SPIR_FUNC;
- case CC_OpenCLKernel: return CGM.getTargetCodeGenInfo().getOpenCLKernelCallingConv();
- case CC_PreserveMost: return llvm::CallingConv::PreserveMost;
- case CC_PreserveAll: return llvm::CallingConv::PreserveAll;
- case CC_Swift: return llvm::CallingConv::Swift;
- case CC_SwiftAsync: return llvm::CallingConv::SwiftTail;
- case CC_M68kRTD: return llvm::CallingConv::M68k_RTD;
- case CC_PreserveNone: return llvm::CallingConv::PreserveNone;
+ case CC_X86VectorCall:
+ return llvm::CallingConv::X86_VectorCall;
+ case CC_AArch64VectorCall:
+ return llvm::CallingConv::AArch64_VectorCall;
+ case CC_AArch64SVEPCS:
+ return llvm::CallingConv::AArch64_SVE_VectorCall;
+ case CC_AMDGPUKernelCall:
+ return llvm::CallingConv::AMDGPU_KERNEL;
+ case CC_SpirFunction:
+ return llvm::CallingConv::SPIR_FUNC;
+ case CC_OpenCLKernel:
+ return CGM.getTargetCodeGenInfo().getOpenCLKernelCallingConv();
+ case CC_PreserveMost:
+ return llvm::CallingConv::PreserveMost;
+ case CC_PreserveAll:
+ return llvm::CallingConv::PreserveAll;
+ case CC_Swift:
+ return llvm::CallingConv::Swift;
+ case CC_SwiftAsync:
+ return llvm::CallingConv::SwiftTail;
+ case CC_M68kRTD:
+ return llvm::CallingConv::M68k_RTD;
+ case CC_PreserveNone:
+ return llvm::CallingConv::PreserveNone;
// clang-format off
case CC_RISCVVectorCall: return llvm::CallingConv::RISCV_VectorCall;
// clang-format on
@@ -110,14 +133,16 @@ CanQualType CodeGenTypes::DeriveThisType(const CXXRecordDecl *RD,
RecTy = Context.VoidTy;
if (MD)
- RecTy = Context.getAddrSpaceQualType(RecTy, MD->getMethodQualifiers().getAddressSpace());
+ RecTy = Context.getAddrSpaceQualType(
+ RecTy, MD->getMethodQualifiers().getAddressSpace());
return Context.getPointerType(CanQualType::CreateUnsafe(RecTy));
}
/// Returns the canonical formal type of the given C++ method.
static CanQual<FunctionProtoType> GetFormalType(const CXXMethodDecl *MD) {
- return MD->getType()->getCanonicalTypeUnqualified()
- .getAs<FunctionProtoType>();
+ return MD->getType()
+ ->getCanonicalTypeUnqualified()
+ .getAs<FunctionProtoType>();
}
/// Returns the "extra-canonicalized" return type, which discards
@@ -140,10 +165,8 @@ CodeGenTypes::arrangeFreeFunctionType(CanQual<FunctionNoProtoType> FTNP) {
}
static void addExtParameterInfosForCall(
- llvm::SmallVectorImpl<FunctionProtoType::ExtParameterInfo> ¶mInfos,
- const FunctionProtoType *proto,
- unsigned prefixArgs,
- unsigned totalArgs) {
+ llvm::SmallVectorImpl<FunctionProtoType::ExtParameterInfo> ¶mInfos,
+ const FunctionProtoType *proto, unsigned prefixArgs, unsigned totalArgs) {
assert(proto->hasExtParameterInfos());
assert(paramInfos.size() <= prefixArgs);
assert(proto->getNumParams() + prefixArgs <= totalArgs);
@@ -169,10 +192,10 @@ static void addExtParameterInfosForCall(
/// Adds the formal parameters in FPT to the given prefix. If any parameter in
/// FPT has pass_object_size attrs, then we'll add parameters for those, too.
-static void appendParameterTypes(const CodeGenTypes &CGT,
- SmallVectorImpl<CanQualType> &prefix,
- SmallVectorImpl<FunctionProtoType::ExtParameterInfo> ¶mInfos,
- CanQual<FunctionProtoType> FPT) {
+static void appendParameterTypes(
+ const CodeGenTypes &CGT, SmallVectorImpl<CanQualType> &prefix,
+ SmallVectorImpl<FunctionProtoType::ExtParameterInfo> ¶mInfos,
+ CanQual<FunctionProtoType> FPT) {
// Fast path: don't touch param info if we don't need to.
if (!FPT->hasExtParameterInfos()) {
assert(paramInfos.empty() &&
@@ -459,13 +482,9 @@ getExtParameterInfosForCall(const FunctionProtoType *proto, unsigned prefixArgs,
/// args.
/// PassProtoArgs indicates whether `args` has args for the parameters in the
/// given CXXConstructorDecl.
-const CGFunctionInfo &
-CodeGenTypes::arrangeCXXConstructorCall(const CallArgList &args,
- const CXXConstructorDecl *D,
- CXXCtorType CtorKind,
- unsigned ExtraPrefixArgs,
- unsigned ExtraSuffixArgs,
- bool PassProtoArgs) {
+const CGFunctionInfo &CodeGenTypes::arrangeCXXConstructorCall(
+ const CallArgList &args, const CXXConstructorDecl *D, CXXCtorType CtorKind,
+ unsigned ExtraPrefixArgs, unsigned ExtraSuffixArgs, bool PassProtoArgs) {
CanQualTypeList ArgTypes;
for (const auto &Arg : args)
ArgTypes.push_back(Context.getCanonicalParamType(Arg.Ty));
@@ -570,7 +589,7 @@ CodeGenTypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD,
einfo = einfo.withProducesResult(true);
RequiredArgs required =
- (MD->isVariadic() ? RequiredArgs(argTys.size()) : RequiredArgs::All);
+ (MD->isVariadic() ? RequiredArgs(argTys.size()) : RequiredArgs::All);
return arrangeLLVMFunctionInfo(GetReturnType(MD->getReturnType()),
FnInfoOpts::None, argTys, einfo, extParamInfos,
@@ -587,8 +606,7 @@ CodeGenTypes::arrangeUnprototypedObjCMessageSend(QualType returnType,
argTypes, einfo, {}, RequiredArgs::All);
}
-const CGFunctionInfo &
-CodeGenTypes::arrangeGlobalDeclaration(GlobalDecl GD) {
+const CGFunctionInfo &CodeGenTypes::arrangeGlobalDeclaration(GlobalDecl GD) {
// FIXME: Do we need to handle ObjCMethodDecl?
if (isa<CXXConstructorDecl>(GD.getDecl()) ||
isa<CXXDestructorDecl>(GD.getDecl()))
@@ -634,12 +652,9 @@ CodeGenTypes::arrangeMSCtorClosure(const CXXConstructorDecl *CD,
/// Arrange a call as unto a free function, except possibly with an
/// additional number of formal parameters considered required.
static const CGFunctionInfo &
-arrangeFreeFunctionLikeCall(CodeGenTypes &CGT,
- CodeGenModule &CGM,
- const CallArgList &args,
- const FunctionType *fnType,
- unsigned numExtraRequiredArgs,
- bool chainCall) {
+arrangeFreeFunctionLikeCall(CodeGenTypes &CGT, CodeGenModule &CGM,
+ const CallArgList &args, const FunctionType *fnType,
+ unsigned numExtraRequiredArgs, bool chainCall) {
assert(args.size() >= numExtraRequiredArgs);
ExtParameterInfoList paramInfos;
@@ -657,13 +672,12 @@ arrangeFreeFunctionLikeCall(CodeGenTypes &CGT,
addExtParameterInfosForCall(paramInfos, proto, numExtraRequiredArgs,
args.size());
- // If we don't have a prototype at all, but we're supposed to
- // explicitly use the variadic convention for unprototyped calls,
- // treat all of the arguments as required but preserve the nominal
- // possibility of variadics.
- } else if (CGM.getTargetCodeGenInfo()
- .isNoProtoCallVariadic(args,
- cast<FunctionNoProtoType>(fnType))) {
+ // If we don't have a prototype at all, but we're supposed to
+ // explicitly use the variadic convention for unprototyped calls,
+ // treat all of the arguments as required but preserve the nominal
+ // possibility of variadics.
+ } else if (CGM.getTargetCodeGenInfo().isNoProtoCallVariadic(
+ args, cast<FunctionNoProtoType>(fnType))) {
required = RequiredArgs(args.size());
}
@@ -680,10 +694,8 @@ arrangeFreeFunctionLikeCall(CodeGenTypes &CGT,
/// type using the given arguments. The arguments are necessary
/// because the function might be unprototyped, in which case it's
/// target-dependent in crazy ways.
-const CGFunctionInfo &
-CodeGenTypes::arrangeFreeFunctionCall(const CallArgList &args,
- const FunctionType *fnType,
- bool chainCall) {
+const CGFunctionInfo &CodeGenTypes::arrangeFreeFunctionCall(
+ const CallArgList &args, const FunctionType *fnType, bool chainCall) {
return arrangeFreeFunctionLikeCall(*this, CGM, args, fnType,
chainCall ? 1 : 0, chainCall);
}
@@ -731,9 +743,8 @@ CodeGenTypes::arrangeBuiltinFunctionDeclaration(QualType resultType,
RequiredArgs::All);
}
-const CGFunctionInfo &
-CodeGenTypes::arrangeBuiltinFunctionDeclaration(CanQualType resultType,
- ArrayRef<CanQualType> argTypes) {
+const CGFunctionInfo &CodeGenTypes::arrangeBuiltinFunctionDeclaration(
+ CanQualType resultType, ArrayRef<CanQualType> argTypes) {
return arrangeLLVMFunctionInfo(resultType, FnInfoOpts::None, argTypes,
FunctionType::ExtInfo(), {},
RequiredArgs::All);
@@ -754,11 +765,9 @@ CodeGenTypes::arrangeSYCLKernelCallerDeclaration(QualType resultType,
///
/// numPrefixArgs is the number of ABI-specific prefix arguments we have. It
/// does not count `this`.
-const CGFunctionInfo &
-CodeGenTypes::arrangeCXXMethodCall(const CallArgList &args,
- const FunctionProtoType *proto,
- RequiredArgs required,
- unsigned numPrefixArgs) {
+const CGFunctionInfo &CodeGenTypes::arrangeCXXMethodCall(
+ const CallArgList &args, const FunctionProtoType *proto,
+ RequiredArgs required, unsigned numPrefixArgs) {
assert(numPrefixArgs + 1 <= args.size() &&
"Emitting a call with less args than the required prefix?");
// Add one to account for `this`. It's a bit awkward here, but we don't count
@@ -780,9 +789,8 @@ const CGFunctionInfo &CodeGenTypes::arrangeNullaryFunction() {
RequiredArgs::All);
}
-const CGFunctionInfo &
-CodeGenTypes::arrangeCall(const CGFunctionInfo &signature,
- const CallArgList &args) {
+const CGFunctionInfo &CodeGenTypes::arrangeCall(const CGFunctionInfo &signature,
+ const CallArgList &args) {
assert(signature.arg_size() <= args.size());
if (signature.arg_size() == args.size())
return signature;
@@ -813,7 +821,7 @@ namespace clang {
namespace CodeGen {
void computeSPIRKernelABIInfo(CodeGenModule &CGM, CGFunctionInfo &FI);
}
-}
+} // namespace clang
/// Arrange the argument and result information for an abstract value
/// of a given function type. This is the method which all of the
@@ -875,7 +883,8 @@ const CGFunctionInfo &CodeGenTypes::arrangeLLVMFunctionInfo(
if (I.info.canHaveCoerceToType() && I.info.getCoerceToType() == nullptr)
I.info.setCoerceToType(ConvertType(I.type));
- bool erased = FunctionsBeingProcessed.erase(FI); (void)erased;
+ bool erased = FunctionsBeingProcessed.erase(FI);
+ (void)erased;
assert(erased && "Not in set?");
return *FI;
@@ -892,11 +901,10 @@ CGFunctionInfo *CGFunctionInfo::create(unsigned llvmCC, bool instanceMethod,
assert(!required.allowsOptionalArgs() ||
required.getNumRequiredArgs() <= argTypes.size());
- void *buffer =
- operator new(totalSizeToAlloc<ArgInfo, ExtParameterInfo>(
- argTypes.size() + 1, paramInfos.size()));
+ void *buffer = operator new(totalSizeToAlloc<ArgInfo, ExtParameterInfo>(
+ argTypes.size() + 1, paramInfos.size()));
- CGFunctionInfo *FI = new(buffer) CGFunctionInfo();
+ CGFunctionInfo *FI = new (buffer) CGFunctionInfo();
FI->CallingConvention = llvmCC;
FI->EffectiveCallingConvention = llvmCC;
FI->ASTCallingConvention = info.getCC();
@@ -985,11 +993,9 @@ struct ComplexExpansion : TypeExpansion {
struct NoExpansion : TypeExpansion {
NoExpansion() : TypeExpansion(TEK_None) {}
- static bool classof(const TypeExpansion *TE) {
- return TE->Kind == TEK_None;
- }
+ static bool classof(const TypeExpansion *TE) { return TE->Kind == TEK_None; }
};
-} // namespace
+} // namespace
static std::unique_ptr<TypeExpansion>
getTypeExpansion(QualType Ty, const ASTContext &Context) {
@@ -1038,7 +1044,7 @@ getTypeExpansion(QualType Ty, const ASTContext &Context) {
}
}
return std::make_unique<RecordExpansion>(std::move(Bases),
- std::move(Fields));
+ std::move(Fields));
}
if (const ComplexType *CT = Ty->getAs<ComplexType>()) {
return std::make_unique<ComplexExpansion>(CT->getElementType());
@@ -1065,9 +1071,8 @@ static int getExpansionSize(QualType Ty, const ASTContext &Context) {
return 1;
}
-void
-CodeGenTypes::getExpandedTypes(QualType Ty,
- SmallVectorImpl<llvm::Type *>::iterator &TI) {
+void CodeGenTypes::getExpandedTypes(
+ QualType Ty, SmallVectorImpl<llvm::Type *>::iterator &TI) {
auto Exp = getTypeExpansion(Ty, Context);
if (auto CAExp = dyn_cast<ConstantArrayExpansion>(Exp.get())) {
for (int i = 0, n = CAExp->NumElts; i < n; i++) {
@@ -1158,14 +1163,13 @@ void CodeGenFunction::ExpandTypeToArgs(
if (auto CAExp = dyn_cast<ConstantArrayExpansion>(Exp.get())) {
Address Addr = Arg.hasLValue() ? Arg.getKnownLValue().getAddress()
: Arg.getKnownRValue().getAggregateAddress();
- forConstantArrayExpansion(
- *this, CAExp, Addr, [&](Address EltAddr) {
- CallArg EltArg = CallArg(
- convertTempToRValue(EltAddr, CAExp->EltTy, SourceLocation()),
- CAExp->EltTy);
- ExpandTypeToArgs(CAExp->EltTy, EltArg, IRFuncTy, IRCallArgs,
- IRCallArgPos);
- });
+ forConstantArrayExpansion(*this, CAExp, Addr, [&](Address EltAddr) {
+ CallArg EltArg =
+ CallArg(convertTempToRValue(EltAddr, CAExp->EltTy, SourceLocation()),
+ CAExp->EltTy);
+ ExpandTypeToArgs(CAExp->EltTy, EltArg, IRFuncTy, IRCallArgs,
+ IRCallArgPos);
+ });
} else if (auto RExp = dyn_cast<RecordExpansion>(Exp.get())) {
Address This = Arg.hasLValue() ? Arg.getKnownLValue().getAddress()
: Arg.getKnownRValue().getAggregateAddress();
@@ -1224,12 +1228,13 @@ static RawAddress CreateTempAllocaForCoercion(CodeGenFunction &CGF,
/// accessing some number of bytes out of it, try to gep into the struct to get
/// at its inner goodness. Dive as deep as possible without entering an element
/// with an in-memory size smaller than DstSize.
-static Address
-EnterStructPointerForCoercedAccess(Address SrcPtr,
- llvm::StructType *SrcSTy,
- uint64_t DstSize, CodeGenFunction &CGF) {
+static Address EnterStructPointerForCoercedAccess(Address SrcPtr,
+ llvm::StructType *SrcSTy,
+ uint64_t DstSize,
+ CodeGenFunction &CGF) {
// We can't dive into a zero-element struct.
- if (SrcSTy->getNumElements() == 0) return SrcPtr;
+ if (SrcSTy->getNumElements() == 0)
+ return SrcPtr;
llvm::Type *FirstElt = SrcSTy->getElementType(0);
@@ -1237,8 +1242,7 @@ EnterStructPointerForCoercedAccess(Address SrcPtr,
// first element is the same size as the whole struct, we can enter it. The
// comparison must be made on the store size and not the alloca size. Using
// the alloca size may overstate the size of the load.
- uint64_t FirstEltSize =
- CGF.CGM.getDataLayout().getTypeStoreSize(FirstElt);
+ uint64_t FirstEltSize = CGF.CGM.getDataLayout().getTypeStoreSize(FirstElt);
if (FirstEltSize < DstSize &&
FirstEltSize < CGF.CGM.getDataLayout().getTypeStoreSize(SrcSTy))
return SrcPtr;
@@ -1261,8 +1265,7 @@ EnterStructPointerForCoercedAccess(Address SrcPtr,
/// This behaves as if the value were coerced through memory, so on big-endian
/// targets the high bits are preserved in a truncation, while little-endian
/// targets preserve the low bits.
-static llvm::Value *CoerceIntOrPtrToIntOrPtr(llvm::Value *Val,
- llvm::Type *Ty,
+static llvm::Value *CoerceIntOrPtrToIntOrPtr(llvm::Value *Val, llvm::Type *Ty,
CodeGenFunction &CGF) {
if (Val->getType() == Ty)
return Val;
@@ -1306,8 +1309,6 @@ static llvm::Value *CoerceIntOrPtrToIntOrPtr(llvm::Value *Val,
return Val;
}
-
-
/// CreateCoercedLoad - Create a load from \arg SrcPtr interpreted as
/// a pointer to an object of type \arg Ty, known to be aligned to
/// \arg SrcAlign bytes.
@@ -1459,8 +1460,8 @@ static Address emitAddressAtOffset(CodeGenFunction &CGF, Address addr,
const ABIArgInfo &info) {
if (unsigned offset = info.getDirectOffset()) {
addr = addr.withElementType(CGF.Int8Ty);
- addr = CGF.Builder.CreateConstInBoundsByteGEP(addr,
- CharUnits::fromQuantity(offset));
+ addr = CGF.Builder.CreateConstInBoundsByteGEP(
+ addr, CharUnits::fromQuantity(offset));
addr = addr.withElementType(info.getCoerceToType());
}
return addr;
@@ -1630,7 +1631,7 @@ void ClangToLLVMArgMapping::construct(const ASTContext &Context,
TotalIRArgs = IRArgNo;
}
-} // namespace
+} // namespace
/***/
@@ -1682,8 +1683,7 @@ llvm::FunctionType *CodeGenTypes::GetFunctionType(GlobalDecl GD) {
return GetFunctionType(FI);
}
-llvm::FunctionType *
-CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) {
+llvm::FunctionType *CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) {
bool Inserted = FunctionsBeingProcessed.insert(&FI).second;
(void)Inserted;
@@ -1723,7 +1723,7 @@ CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) {
}
ClangToLLVMArgMapping IRFunctionArgs(getContext(), FI, true);
- SmallVector<llvm::Type*, 8> ArgTypes(IRFunctionArgs.totalIRArgs());
+ SmallVector<llvm::Type *, 8> ArgTypes(IRFunctionArgs.totalIRArgs());
// Add type for sret argument.
if (IRFunctionArgs.hasSRetArg()) {
@@ -1802,7 +1802,8 @@ CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) {
}
}
- bool Erased = FunctionsBeingProcessed.erase(&FI); (void)Erased;
+ bool Erased = FunctionsBeingProcessed.erase(&FI);
+ (void)Erased;
assert(Erased && "Not in set?");
return llvm::FunctionType::get(resultType, ArgTypes, FI.isVariadic());
@@ -2013,8 +2014,7 @@ static void getTrivialDefaultFunctionAttributes(
// TODO: Reciprocal estimate codegen options should apply to instructions?
const std::vector<std::string> &Recips = CodeGenOpts.Reciprocals;
if (!Recips.empty())
- FuncAttrs.addAttribute("reciprocal-estimates",
- llvm::join(Recips, ","));
+ FuncAttrs.addAttribute("reciprocal-estimates", llvm::join(Recips, ","));
if (!CodeGenOpts.PreferVectorWidth.empty() &&
CodeGenOpts.PreferVectorWidth != "none")
@@ -2745,8 +2745,7 @@ void CodeGenModule::ConstructAttributeList(StringRef Name,
llvm::AttrBuilder Attrs(getLLVMContext());
- QualType ThisTy =
- FI.arg_begin()->type.getTypePtr()->getPointeeType();
+ QualType ThisTy = FI.arg_begin()->type.getTypePtr()->getPointeeType();
if (!CodeGenOpts.NullPointerIsValid &&
getTypes().getTargetAddressSpace(FI.arg_begin()->type) == 0) {
@@ -2773,8 +2772,7 @@ void CodeGenModule::ConstructAttributeList(StringRef Name,
}
unsigned ArgNo = 0;
- for (CGFunctionInfo::const_arg_iterator I = FI.arg_begin(),
- E = FI.arg_end();
+ for (CGFunctionInfo::const_arg_iterator I = FI.arg_begin(), E = FI.arg_end();
I != E; ++I, ++ArgNo) {
QualType ParamType = I->type;
const ABIArgInfo &AI = I->info;
@@ -2784,9 +2782,9 @@ void CodeGenModule::ConstructAttributeList(StringRef Name,
if (IRFunctionArgs.hasPaddingArg(ArgNo)) {
if (AI.getPaddingInReg()) {
ArgAttrs[IRFunctionArgs.getPaddingArgNo(ArgNo)] =
- llvm::AttributeSet::get(
- getLLVMContext(),
- llvm::AttrBuilder(getLLVMContext()).addAttribute(llvm::Attribute::InReg));
+ llvm::AttributeSet::get(getLLVMContext(),
+ llvm::AttrBuilder(getLLVMContext())
+ .addAttribute(llvm::Attribute::InReg));
}
}
@@ -2879,8 +2877,7 @@ void CodeGenModule::ConstructAttributeList(StringRef Name,
if (const auto *RefTy = ParamType->getAs<ReferenceType>()) {
QualType PTy = RefTy->getPointeeType();
if (!PTy->isIncompleteType() && PTy->isConstantSizeType())
- Attrs.addDereferenceableAttr(
- getMinimumObjectSize(PTy).getQuantity());
+ Attrs.addDereferenceableAttr(getMinimumObjectSize(PTy).getQuantity());
if (getTypes().getTargetAddressSpace(PTy) == 0 &&
!CodeGenOpts.NullPointerIsValid)
Attrs.addAttribute(llvm::Attribute::NonNull);
@@ -2974,10 +2971,11 @@ static llvm::Value *emitArgumentDemotion(CodeGenFunction &CGF,
// This can happen with promotions that actually don't change the
// underlying type, like the enum promotions.
- if (value->getType() == varType) return value;
+ if (value->getType() == varType)
+ return value;
- assert((varType->isIntegerTy() || varType->isFloatingPointTy())
- && "unexpected promotion type");
+ assert((varType->isIntegerTy() || varType->isFloatingPointTy()) &&
+ "unexpected promotion type");
if (isa<llvm::IntegerType>(varType))
return CGF.Builder.CreateTrunc(value, varType, "arg.unpromote");
@@ -3014,16 +3012,16 @@ static const NonNullAttr *getNonNullAttr(const Decl *FD, const ParmVarDecl *PVD,
}
namespace {
- struct CopyBackSwiftError final : EHScopeStack::Cleanup {
- Address Temp;
- Address Arg;
- CopyBackSwiftError(Address temp, Address arg) : Temp(temp), Arg(arg) {}
- void Emit(CodeGenFunction &CGF, Flags flags) override {
- llvm::Value *errorValue = CGF.Builder.CreateLoad(Temp);
- CGF.Builder.CreateStore(errorValue, Arg);
- }
- };
-}
+struct CopyBackSwiftError final : EHScopeStack::Cleanup {
+ Address Temp;
+ Address Arg;
+ CopyBackSwiftError(Address temp, Address arg) : Temp(temp), Arg(arg) {}
+ void Emit(CodeGenFunction &CGF, Flags flags) override {
+ llvm::Value *errorValue = CGF.Builder.CreateLoad(Temp);
+ CGF.Builder.CreateStore(errorValue, Arg);
+ }
+};
+} // namespace
void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
llvm::Function *Fn,
@@ -3039,8 +3037,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(CurCodeDecl)) {
if (FD->hasImplicitReturnZero()) {
QualType RetTy = FD->getReturnType().getUnqualifiedType();
- llvm::Type* LLVMTy = CGM.getTypes().ConvertType(RetTy);
- llvm::Constant* Zero = llvm::Constant::getNullValue(LLVMTy);
+ llvm::Type *LLVMTy = CGM.getTypes().ConvertType(RetTy);
+ llvm::Constant *Zero = llvm::Constant::getNullValue(LLVMTy);
Builder.CreateStore(Zero, ReturnValue);
}
}
@@ -3079,13 +3077,13 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
"Mismatch between function signature & arguments.");
unsigned ArgNo = 0;
CGFunctionInfo::const_arg_iterator info_it = FI.arg_begin();
- for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
- i != e; ++i, ++info_it, ++ArgNo) {
+ for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end(); i != e;
+ ++i, ++info_it, ++ArgNo) {
const VarDecl *Arg = *i;
const ABIArgInfo &ArgI = info_it->info;
bool isPromoted =
- isa<ParmVarDecl>(Arg) && cast<ParmVarDecl>(Arg)->isKNRPromoted();
+ isa<ParmVarDecl>(Arg) && cast<ParmVarDecl>(Arg)->isKNRPromoted();
// We are converting from ABIArgInfo type to VarDecl type directly, unless
// the parameter is promoted. In this case we convert to
// CGFunctionInfo::ArgInfo type with subsequent argument demotion.
@@ -3170,8 +3168,7 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
AI->addAttr(llvm::Attribute::NonNull);
QualType OTy = PVD->getOriginalType();
- if (const auto *ArrTy =
- getContext().getAsConstantArrayType(OTy)) {
+ if (const auto *ArrTy = getContext().getAsConstantArrayType(OTy)) {
// A C99 array parameter declaration with the static keyword also
// indicates dereferenceability, and if the size is constant we can
// use the dereferenceable attribute (which requires the size in
@@ -3180,7 +3177,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
QualType ETy = ArrTy->getElementType();
llvm::Align Alignment =
CGM.getNaturalTypeAlignment(ETy).getAsAlign();
- AI->addAttrs(llvm::AttrBuilder(getLLVMContext()).addAlignmentAttr(Alignment));
+ AI->addAttrs(llvm::AttrBuilder(getLLVMContext())
+ .addAlignmentAttr(Alignment));
uint64_t ArrSize = ArrTy->getZExtSize();
if (!ETy->isIncompleteType() && ETy->isConstantSizeType() &&
ArrSize) {
@@ -3196,7 +3194,7 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
}
}
} else if (const auto *ArrTy =
- getContext().getAsVariableArrayType(OTy)) {
+ getContext().getAsVariableArrayType(OTy)) {
// For C99 VLAs with the static keyword, we don't know the size so
// we can't use the dereferenceable attribute, but in addrspace(0)
// we know that it must be nonnull.
@@ -3204,7 +3202,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
QualType ETy = ArrTy->getElementType();
llvm::Align Alignment =
CGM.getNaturalTypeAlignment(ETy).getAsAlign();
- AI->addAttrs(llvm::AttrBuilder(getLLVMContext()).addAlignmentAttr(Alignment));
+ AI->addAttrs(llvm::AttrBuilder(getLLVMContext())
+ .addAlignmentAttr(Alignment));
if (!getTypes().getTargetAddressSpace(ETy) &&
!CGM.getCodeGenOpts().NullPointerIsValid)
AI->addAttr(llvm::Attribute::NonNull);
@@ -3226,8 +3225,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
AlignmentCI->getLimitedValue(llvm::Value::MaximumAlignment);
if (AI->getParamAlign().valueOrOne() < AlignmentInt) {
AI->removeAttr(llvm::Attribute::AttrKind::Alignment);
- AI->addAttrs(llvm::AttrBuilder(getLLVMContext()).addAlignmentAttr(
- llvm::Align(AlignmentInt)));
+ AI->addAttrs(llvm::AttrBuilder(getLLVMContext())
+ .addAlignmentAttr(llvm::Align(AlignmentInt)));
}
}
}
@@ -3247,8 +3246,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
// LLVM expects swifterror parameters to be used in very restricted
// ways. Copy the value into a less-restricted temporary.
llvm::Value *V = AI;
- if (FI.getExtParameterInfo(ArgNo).getABI()
- == ParameterABI::SwiftErrorResult) {
+ if (FI.getExtParameterInfo(ArgNo).getABI() ==
+ ParameterABI::SwiftErrorResult) {
QualType pointeeTy = Ty->getPointeeType();
assert(pointeeTy->isPointerType());
RawAddress temp =
@@ -3315,8 +3314,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
llvm::StructType *STy =
dyn_cast<llvm::StructType>(ArgI.getCoerceToType());
- Address Alloca = CreateMemTemp(Ty, getContext().getDeclAlign(Arg),
- Arg->getName());
+ Address Alloca =
+ CreateMemTemp(Ty, getContext().getDeclAlign(Arg), Arg->getName());
// Pointer to store into.
Address Ptr = emitAddressAtOffset(*this, Alloca, ArgI);
@@ -3478,7 +3477,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
static void eraseUnusedBitCasts(llvm::Instruction *insn) {
while (insn->use_empty()) {
llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(insn);
- if (!bitcast) return;
+ if (!bitcast)
+ return;
// This is "safe" because we would have used a ConstantExpr otherwise.
insn = cast<llvm::Instruction>(bitcast->getOperand(0));
@@ -3491,8 +3491,10 @@ static llvm::Value *tryEmitFusedAutoreleaseOfResult(CodeGenFunction &CGF,
llvm::Value *result) {
// We must be immediately followed the cast.
llvm::BasicBlock *BB = CGF.Builder.GetInsertBlock();
- if (BB->empty()) return nullptr;
- if (&BB->back() != result) return nullptr;
+ if (BB->empty())
+ return nullptr;
+ if (&BB->back() != result)
+ return nullptr;
llvm::Type *resultType = result->getType();
@@ -3518,9 +3520,11 @@ static llvm::Value *tryEmitFusedAutoreleaseOfResult(CodeGenFunction &CGF,
// Look for:
// %generator = call i8* @objc_retain(i8* %originalResult)
// or
- // %generator = call i8* @objc_retainAutoreleasedReturnValue(i8* %originalResult)
+ // %generator = call i8* @objc_retainAutoreleasedReturnValue(i8*
+ // %originalResult)
llvm::CallInst *call = dyn_cast<llvm::CallInst>(generator);
- if (!call) return nullptr;
+ if (!call)
+ return nullptr;
bool doRetainAutorelease;
@@ -3557,7 +3561,8 @@ static llvm::Value *tryEmitFusedAutoreleaseOfResult(CodeGenFunction &CGF,
// Keep killing bitcasts, for sanity. Note that we no longer care
// about precise ordering as long as there's exactly one use.
while (llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(result)) {
- if (!bitcast->hasOneUse()) break;
+ if (!bitcast->hasOneUse())
+ break;
InstsToKill.push_back(bitcast);
result = bitcast->getOperand(0);
}
@@ -3579,10 +3584,12 @@ static llvm::Value *tryRemoveRetainOfSelf(CodeGenFunction &CGF,
llvm::Value *result) {
// This is only applicable to a method with an immutable 'self'.
const ObjCMethodDecl *method =
- dyn_cast_or_null<ObjCMethodDecl>(CGF.CurCodeDecl);
- if (!method) return nullptr;
+ dyn_cast_or_null<ObjCMethodDecl>(CGF.CurCodeDecl);
+ if (!method)
+ return nullptr;
const VarDecl *self = method->getSelfDecl();
- if (!self->getType().isConstQualified()) return nullptr;
+ if (!self->getType().isConstQualified())
+ return nullptr;
// Look for a retain call. Note: stripPointerCasts looks through returned arg
// functions, which would cause us to miss the retain.
@@ -3594,7 +3601,7 @@ static llvm::Value *tryRemoveRetainOfSelf(CodeGenFunction &CGF,
// Look for an ordinary load of 'self'.
llvm::Value *retainedValue = retainCall->getArgOperand(0);
llvm::LoadInst *load =
- dyn_cast<llvm::LoadInst>(retainedValue->stripPointerCasts());
+ dyn_cast<llvm::LoadInst>(retainedValue->stripPointerCasts());
if (!load || load->isAtomic() || load->isVolatile() ||
load->getPointerOperand() != CGF.GetAddrOfLocalVar(self).getBasePointer())
return nullptr;
@@ -3657,7 +3664,8 @@ static llvm::StoreInst *findDominatingStoreToReturnValue(CodeGenFunction &CGF) {
// with noreturn cleanups.
if (!ReturnValuePtr->hasOneUse()) {
llvm::BasicBlock *IP = CGF.Builder.GetInsertBlock();
- if (IP->empty()) return nullptr;
+ if (IP->empty())
+ return nullptr;
// Look at directly preceding instruction, skipping bitcasts, lifetime
// markers, and fake uses and their operands.
@@ -3685,7 +3693,8 @@ static llvm::StoreInst *findDominatingStoreToReturnValue(CodeGenFunction &CGF) {
}
llvm::StoreInst *store = GetStoreIfValid(ReturnValuePtr->user_back());
- if (!store) return nullptr;
+ if (!store)
+ return nullptr;
// Now do a first-and-dirty dominance check: just walk up the
// single-predecessors chain from the current insertion point.
@@ -3780,8 +3789,7 @@ static void setUsedBits(CodeGenModule &CGM, const RecordType *RTy, int Offset,
if (F->isBitField()) {
const CGBitFieldInfo &BFI = Layout.getBitFieldInfo(F);
setBitRange(Bits, Offset + BFI.StorageOffset.getQuantity(),
- BFI.StorageSize / CharWidth, BFI.Offset,
- BFI.Size, CharWidth,
+ BFI.StorageSize / CharWidth, BFI.Offset, BFI.Size, CharWidth,
CGM.getDataLayout().isBigEndian());
continue;
}
@@ -3945,7 +3953,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
switch (getEvaluationKind(RetTy)) {
case TEK_Complex: {
ComplexPairTy RT =
- EmitLoadOfComplex(MakeAddrLValue(ReturnValue, RetTy), EndLoc);
+ EmitLoadOfComplex(MakeAddrLValue(ReturnValue, RetTy), EndLoc);
EmitStoreOfComplex(RT, MakeNaturalAlignAddrLValue(&*AI, RetTy),
/*isInit*/ true);
break;
@@ -3979,8 +3987,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
// If there is a dominating store to ReturnValue, we can elide
// the load, zap the store, and usually zap the alloca.
- if (llvm::StoreInst *SI =
- findDominatingStoreToReturnValue(*this)) {
+ if (llvm::StoreInst *SI = findDominatingStoreToReturnValue(*this)) {
// Reuse the debug location from the store unless there is
// cleanup code to be emitted between the store and return
// instruction.
@@ -3990,7 +3997,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
RV = SI->getValueOperand();
SI->eraseFromParent();
- // Otherwise, we have to do a simple load.
+ // Otherwise, we have to do a simple load.
} else {
RV = Builder.CreateLoad(ReturnValue);
}
@@ -4020,8 +4027,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
else
llvm_unreachable("Unexpected function/method type");
- assert(getLangOpts().ObjCAutoRefCount &&
- !FI.isReturnsRetained() &&
+ assert(getLangOpts().ObjCAutoRefCount && !FI.isReturnsRetained() &&
RT->isObjCRetainableType());
#endif
RV = emitAutoreleaseOfResult(*this, RV);
@@ -4038,7 +4044,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
auto *unpaddedStruct = dyn_cast<llvm::StructType>(unpaddedCoercionType);
// Load all of the coerced elements out into results.
- llvm::SmallVector<llvm::Value*, 4> results;
+ llvm::SmallVector<llvm::Value *, 4> results;
Address addr = ReturnValue.withElementType(coercionType);
unsigned unpaddedIndex = 0;
for (unsigned i = 0, e = coercionType->getNumElements(); i != e; ++i) {
@@ -4059,7 +4065,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
if (results.size() == 1) {
RV = results[0];
- // Otherwise, we need to make a first-class aggregate.
+ // Otherwise, we need to make a first-class aggregate.
} else {
// Construct a return type that lacks padding elements.
llvm::Type *returnType = RetAI.getUnpaddedCoerceAndExpandType();
@@ -4165,8 +4171,7 @@ static bool isInAllocaArgument(CGCXXABI &ABI, QualType type) {
return RD && ABI.getRecordArgABI(RD) == CGCXXABI::RAA_DirectInMemory;
}
-static AggValueSlot createPlaceholderSlot(CodeGenFunction &CGF,
- QualType Ty) {
+static AggValueSlot createPlaceholderSlot(CodeGenFunction &CGF, QualType Ty) {
// FIXME: Generate IR in one pass, rather than going back and fixing up these
// placeholders.
llvm::Type *IRTy = CGF.ConvertTypeForMem(Ty);
@@ -4178,12 +4183,10 @@ static AggValueSlot createPlaceholderSlot(CodeGenFunction &CGF,
CharUnits Align = CharUnits::fromQuantity(4);
Placeholder = CGF.Builder.CreateAlignedLoad(IRPtrTy, Placeholder, Align);
- return AggValueSlot::forAddr(Address(Placeholder, IRTy, Align),
- Ty.getQualifiers(),
- AggValueSlot::IsNotDestructed,
- AggValueSlot::DoesNotNeedGCBarriers,
- AggValueSlot::IsNotAliased,
- AggValueSlot::DoesNotOverlap);
+ return AggValueSlot::forAddr(
+ Address(Placeholder, IRTy, Align), Ty.getQualifiers(),
+ AggValueSlot::IsNotDestructed, AggValueSlot::DoesNotNeedGCBarriers,
+ AggValueSlot::IsNotAliased, AggValueSlot::DoesNotOverlap);
}
void CodeGenFunction::EmitDelegateCallArg(CallArgList &args,
@@ -4201,22 +4204,21 @@ void CodeGenFunction::EmitDelegateCallArg(CallArgList &args,
if (type->isReferenceType()) {
args.add(RValue::get(Builder.CreateLoad(local)), type);
- // In ARC, move out of consumed arguments so that the release cleanup
- // entered by StartFunction doesn't cause an over-release. This isn't
- // optimal -O0 code generation, but it should get cleaned up when
- // optimization is enabled. This also assumes that delegate calls are
- // performed exactly once for a set of arguments, but that should be safe.
+ // In ARC, move out of consumed arguments so that the release cleanup
+ // entered by StartFunction doesn't cause an over-release. This isn't
+ // optimal -O0 code generation, but it should get cleaned up when
+ // optimization is enabled. This also assumes that delegate calls are
+ // performed exactly once for a set of arguments, but that should be safe.
} else if (getLangOpts().ObjCAutoRefCount &&
- param->hasAttr<NSConsumedAttr>() &&
- type->isObjCRetainableType()) {
+ param->hasAttr<NSConsumedAttr>() && type->isObjCRetainableType()) {
llvm::Value *ptr = Builder.CreateLoad(local);
auto null =
- llvm::ConstantPointerNull::get(cast<llvm::PointerType>(ptr->getType()));
+ llvm::ConstantPointerNull::get(cast<llvm::PointerType>(ptr->getType()));
Builder.CreateStore(null, local);
args.add(RValue::get(ptr), type);
- // For the most part, we just need to load the alloca, except that
- // aggregate r-values are actually pointers to temporaries.
+ // For the most part, we just need to load the alloca, except that
+ // aggregate r-values are actually pointers to temporaries.
} else {
args.add(convertTempToRValue(local, type, loc), type);
}
@@ -4308,7 +4310,7 @@ static void emitWriteback(CodeGenFunction &CGF,
// Release the old value.
CGF.EmitARCRelease(oldValue, srcLV.isARCPreciseLifetime());
- // Otherwise, we can just do a normal lvalue store.
+ // Otherwise, we can just do a normal lvalue store.
} else {
CGF.EmitStoreThroughLValue(RValue::get(value), srcLV);
}
@@ -4321,7 +4323,7 @@ static void emitWriteback(CodeGenFunction &CGF,
static void deactivateArgCleanupsBeforeCall(CodeGenFunction &CGF,
const CallArgList &CallArgs) {
ArrayRef<CallArgList::CallArgCleanup> Cleanups =
- CallArgs.getCleanupsToDeactivate();
+ CallArgs.getCleanupsToDeactivate();
// Iterate in reverse to increase the likelihood of popping the cleanup.
for (const auto &I : llvm::reverse(Cleanups)) {
CGF.DeactivateCleanupBlock(I.Cleanup, I.IsActiveIP);
@@ -4349,12 +4351,12 @@ static void emitWritebackArg(CodeGenFunction &CGF, CallArgList &args,
if (const Expr *lvExpr = maybeGetUnaryAddrOfOperand(CRE->getSubExpr())) {
srcLV = CGF.EmitLValue(lvExpr);
- // Otherwise, just emit it as a scalar.
+ // Otherwise, just emit it as a scalar.
} else {
Address srcAddr = CGF.EmitPointerWithAlignment(CRE->getSubExpr());
QualType srcAddrType =
- CRE->getSubExpr()->getType()->castAs<PointerType>()->getPointeeType();
+ CRE->getSubExpr()->getType()->castAs<PointerType>()->getPointeeType();
srcLV = CGF.MakeAddrLValue(srcAddr, srcAddrType);
}
Address srcAddr = srcLV.getAddress();
@@ -4451,8 +4453,8 @@ static void emitWritebackArg(CodeGenFunction &CGF, CallArgList &args,
// Make a phi for the value to intrinsically use.
if (valueToUse) {
- llvm::PHINode *phiToUse = CGF.Builder.CreatePHI(valueToUse->getType(), 2,
- "icr.to-use");
+ llvm::PHINode *phiToUse =
+ CGF.Builder.CreatePHI(valueToUse->getType(), 2, "icr.to-use");
phiToUse->addIncoming(valueToUse, copyBB);
phiToUse->addIncoming(llvm::PoisonValue::get(valueToUse->getType()),
originBB);
@@ -4482,8 +4484,7 @@ void CallArgList::freeArgumentMemory(CodeGenFunction &CGF) const {
void CodeGenFunction::EmitNonNullArgCheck(RValue RV, QualType ArgType,
SourceLocation ArgLoc,
- AbstractCallee AC,
- unsigned ParmNum) {
+ AbstractCallee AC, unsigned ParmNum) {
if (!AC.getDecl() || !(SanOpts.has(SanitizerKind::NonnullAttribute) ||
SanOpts.has(SanitizerKind::NullabilityArg)))
return;
@@ -4525,7 +4526,8 @@ void CodeGenFunction::EmitNonNullArgCheck(RValue RV, QualType ArgType,
SanitizerScope SanScope(this);
llvm::Value *Cond = EmitNonNullRValueCheck(RV, ArgType);
llvm::Constant *StaticData[] = {
- EmitCheckSourceLocation(ArgLoc), EmitCheckSourceLocation(AttrLoc),
+ EmitCheckSourceLocation(ArgLoc),
+ EmitCheckSourceLocation(AttrLoc),
llvm::ConstantInt::get(Int32Ty, ArgNo + 1),
};
EmitCheck(std::make_pair(Cond, CheckKind), Handler, StaticData, {});
@@ -4662,9 +4664,8 @@ void CodeGenFunction::EmitCallArgs(
auto SizeTy = Context.getSizeType();
auto T = Builder.getIntNTy(Context.getTypeSize(SizeTy));
assert(EmittedArg.getScalarVal() && "We emitted nothing for the arg?");
- llvm::Value *V = evaluateOrEmitBuiltinObjectSize(Arg, PS->getType(), T,
- EmittedArg.getScalarVal(),
- PS->isDynamic());
+ llvm::Value *V = evaluateOrEmitBuiltinObjectSize(
+ Arg, PS->getType(), T, EmittedArg.getScalarVal(), PS->isDynamic());
Args.add(RValue::get(V), SizeTy);
// If we're emitting args in reverse, be sure to do so with
// pass_object_size, as well.
@@ -4725,8 +4726,7 @@ void CodeGenFunction::EmitCallArgs(
namespace {
struct DestroyUnpassedArg final : EHScopeStack::Cleanup {
- DestroyUnpassedArg(Address Addr, QualType Ty)
- : Addr(Addr), Ty(Ty) {}
+ DestroyUnpassedArg(Address Addr, QualType Ty) : Addr(Addr), Ty(Ty) {}
Address Addr;
QualType Ty;
@@ -4794,8 +4794,8 @@ void CodeGenFunction::EmitWritebacks(const CallArgList &args) {
void CodeGenFunction::EmitCallArg(CallArgList &args, const Expr *E,
QualType type) {
DisableDebugLocationUpdates Dis(*this, E);
- if (const ObjCIndirectCopyRestoreExpr *CRE
- = dyn_cast<ObjCIndirectCopyRestoreExpr>(E)) {
+ if (const ObjCIndirectCopyRestoreExpr *CRE =
+ dyn_cast<ObjCIndirectCopyRestoreExpr>(E)) {
assert(getLangOpts().ObjCAutoRefCount);
return emitWritebackArg(*this, args, CRE);
}
@@ -4826,7 +4826,8 @@ void CodeGenFunction::EmitCallArg(CallArgList &args, const Expr *E,
// If we're using inalloca, use the argument memory. Otherwise, use a
// temporary.
AggValueSlot Slot = args.isUsingInAlloca()
- ? createPlaceholderSlot(*this, type) : CreateAggTemp(type, "agg.tmp");
+ ? createPlaceholderSlot(*this, type)
+ : CreateAggTemp(type, "agg.tmp");
bool DestroyedInCallee = true, NeedsCleanup = true;
if (const auto *RD = type->getAsCXXRecordDecl())
@@ -4887,8 +4888,7 @@ QualType CodeGenFunction::getVarArgType(const Expr *Arg) {
// In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
// optimizer it can aggressively ignore unwind edges.
-void
-CodeGenFunction::AddObjCARCExceptionMetadata(llvm::Instruction *Inst) {
+void CodeGenFunction::AddObjCARCExceptionMetadata(llvm::Instruction *Inst) {
if (CGM.getCodeGenOpts().OptimizationLevel != 0 &&
!CGM.getCodeGenOpts().ObjCAutoRefCountExceptions)
Inst->setMetadata("clang.arc.no_objc_arc_exceptions",
@@ -4973,12 +4973,8 @@ void CodeGenFunction::EmitNoreturnRuntimeCallOrInvoke(
getBundlesForFunclet(callee.getCallee());
if (getInvokeDest()) {
- llvm::InvokeInst *invoke =
- Builder.CreateInvoke(callee,
- getUnreachableBlock(),
- getInvokeDest(),
- args,
- BundleList);
+ llvm::InvokeInst *invoke = Builder.CreateInvoke(
+ callee, getUnreachableBlock(), getInvokeDest(), args, BundleList);
invoke->setDoesNotReturn();
invoke->setCallingConv(getRuntimeCC());
} else {
@@ -5384,17 +5380,16 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
NeedCopy = true;
}
if (!getLangOpts().OpenCL) {
- if ((isByValOrRef &&
- (AS != LangAS::Default &&
- AS != CGM.getASTAllocaAddressSpace()))) {
+ if ((isByValOrRef && (AS != LangAS::Default &&
+ AS != CGM.getASTAllocaAddressSpace()))) {
NeedCopy = true;
}
}
// For OpenCL even if RV is located in default or alloca address space
// we don't want to perform address space cast for it.
- else if ((isByValOrRef &&
- Addr.getType()->getAddressSpace() != IRFuncTy->
- getParamType(FirstIRArg)->getPointerAddressSpace())) {
+ else if ((isByValOrRef && Addr.getType()->getAddressSpace() !=
+ IRFuncTy->getParamType(FirstIRArg)
+ ->getPointerAddressSpace())) {
NeedCopy = true;
}
}
@@ -5467,8 +5462,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
// Implement swifterror by copying into a new swifterror argument.
// We'll write back in the normal path out of the call.
- if (CallInfo.getExtParameterInfo(ArgNo).getABI()
- == ParameterABI::SwiftErrorResult) {
+ if (CallInfo.getExtParameterInfo(ArgNo).getABI() ==
+ ParameterABI::SwiftErrorResult) {
assert(!swiftErrorTemp.isValid() && "multiple swifterror args");
QualType pointeeTy = I->Ty->getPointeeType();
@@ -5476,7 +5471,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
V, pointeeTy, getContext().getTypeAlignInChars(pointeeTy));
swiftErrorTemp =
- CreateMemTemp(pointeeTy, getPointerAlign(), "swifterror.temp");
+ CreateMemTemp(pointeeTy, getPointerAlign(), "swifterror.temp");
V = swiftErrorTemp.getPointer();
cast<llvm::AllocaInst>(V)->setSwiftError(true);
@@ -5620,11 +5615,11 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
auto scalarAlign = CGM.getDataLayout().getPrefTypeAlign(scalarType);
// Materialize to a temporary.
- addr = CreateTempAlloca(
- RV.getScalarVal()->getType(),
- CharUnits::fromQuantity(std::max(layout->getAlignment(), scalarAlign)),
- "tmp",
- /*ArraySize=*/nullptr, &AllocaAddr);
+ addr = CreateTempAlloca(RV.getScalarVal()->getType(),
+ CharUnits::fromQuantity(std::max(
+ layout->getAlignment(), scalarAlign)),
+ "tmp",
+ /*ArraySize=*/nullptr, &AllocaAddr);
tempSize = EmitLifetimeStart(scalarSize, AllocaAddr.getPointer());
Builder.CreateStore(RV.getScalarVal(), addr);
@@ -5636,7 +5631,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
unsigned unpaddedIndex = 0;
for (unsigned i = 0, e = coercionType->getNumElements(); i != e; ++i) {
llvm::Type *eltType = coercionType->getElementType(i);
- if (ABIArgInfo::isPaddingForCoerceAndExpand(eltType)) continue;
+ if (ABIArgInfo::isPaddingForCoerceAndExpand(eltType))
+ continue;
Address eltAddr = Builder.CreateStructGEP(addr, i);
llvm::Value *elt = CreateCoercedLoad(
eltAddr,
@@ -5870,7 +5866,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
// Control Flow Guard checks should not be added, even if the call is inlined.
if (const auto *FD = dyn_cast_or_null<FunctionDecl>(CurFuncDecl)) {
if (const auto *A = FD->getAttr<CFGuardAttr>()) {
- if (A->getGuard() == CFGuardAttr::GuardArg::nocf && !CI->getCalledFunction())
+ if (A->getGuard() == CFGuardAttr::GuardArg::nocf &&
+ !CI->getCalledFunction())
Attrs = Attrs.addFnAttribute(getLLVMContext(), "guard_nocf");
}
}
@@ -5895,8 +5892,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
// For more details, see the comment before the definition of
// IPVK_IndirectCallTarget in InstrProfData.inc.
if (!CI->getCalledFunction())
- PGO.valueProfile(Builder, llvm::IPVK_IndirectCallTarget,
- CI, CalleePtr);
+ PGO.valueProfile(Builder, llvm::IPVK_IndirectCallTarget, CI, CalleePtr);
// In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
// optimizer it can aggressively ignore unwind edges.
@@ -5939,8 +5935,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
}
// Add metadata for calls to MSAllocator functions
- if (getDebugInfo() && TargetDecl &&
- TargetDecl->hasAttr<MSAllocatorAttr>())
+ if (getDebugInfo() && TargetDecl && TargetDecl->hasAttr<MSAllocatorAttr>())
getDebugInfo()->addHeapAllocSiteMetadata(CI, RetTy->getPointeeType(), Loc);
// Add metadata if calling an __attribute__((error(""))) or warning fn.
More information about the cfe-commits
mailing list