[clang] [clang] run clang-format on some CGObjC files (PR #126644)
Peter Rong via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 11 12:28:15 PST 2025
https://github.com/DataCorrupted updated https://github.com/llvm/llvm-project/pull/126644
>From f0c683e0ebf05a3a3979daf0cddcad6a4913d82b Mon Sep 17 00:00:00 2001
From: Peter Rong <PeterRong at meta.com>
Date: Mon, 10 Feb 2025 17:22:10 -0800
Subject: [PATCH 1/2] [clang] run clang-format on some CGObjC files
Signed-off-by: Peter Rong <PeterRong at meta.com>
---
clang/include/clang/AST/Mangle.h | 58 +-
clang/lib/CodeGen/CGObjCMac.cpp | 2270 +++++++++++++--------------
clang/lib/CodeGen/CGObjCRuntime.h | 129 +-
clang/lib/CodeGen/CodeGenFunction.h | 411 +++--
4 files changed, 1336 insertions(+), 1532 deletions(-)
diff --git a/clang/include/clang/AST/Mangle.h b/clang/include/clang/AST/Mangle.h
index d5f6c0f6cc67d..6134a70c04bd3 100644
--- a/clang/include/clang/AST/Mangle.h
+++ b/clang/include/clang/AST/Mangle.h
@@ -22,32 +22,29 @@
#include <optional>
namespace llvm {
- class raw_ostream;
+class raw_ostream;
}
namespace clang {
- class ASTContext;
- class BlockDecl;
- class CXXConstructorDecl;
- class CXXDestructorDecl;
- class CXXMethodDecl;
- class FunctionDecl;
- struct MethodVFTableLocation;
- class NamedDecl;
- class ObjCMethodDecl;
- class StringLiteral;
- struct ThisAdjustment;
- struct ThunkInfo;
- class VarDecl;
+class ASTContext;
+class BlockDecl;
+class CXXConstructorDecl;
+class CXXDestructorDecl;
+class CXXMethodDecl;
+class FunctionDecl;
+struct MethodVFTableLocation;
+class NamedDecl;
+class ObjCMethodDecl;
+class StringLiteral;
+struct ThisAdjustment;
+struct ThunkInfo;
+class VarDecl;
/// MangleContext - Context for tracking state which persists across multiple
/// calls to the C++ name mangler.
class MangleContext {
public:
- enum ManglerKind {
- MK_Itanium,
- MK_Microsoft
- };
+ enum ManglerKind { MK_Itanium, MK_Microsoft };
private:
virtual void anchor();
@@ -59,10 +56,10 @@ class MangleContext {
/// ASTContext.
bool IsAux = false;
- llvm::DenseMap<const BlockDecl*, unsigned> GlobalBlockIds;
- llvm::DenseMap<const BlockDecl*, unsigned> LocalBlockIds;
- llvm::DenseMap<const NamedDecl*, uint64_t> AnonStructIds;
- llvm::DenseMap<const FunctionDecl*, unsigned> FuncAnonStructSize;
+ llvm::DenseMap<const BlockDecl *, unsigned> GlobalBlockIds;
+ llvm::DenseMap<const BlockDecl *, unsigned> LocalBlockIds;
+ llvm::DenseMap<const NamedDecl *, uint64_t> AnonStructIds;
+ llvm::DenseMap<const FunctionDecl *, unsigned> FuncAnonStructSize;
public:
ManglerKind getKind() const { return Kind; }
@@ -73,7 +70,7 @@ class MangleContext {
ManglerKind Kind, bool IsAux = false)
: Context(Context), Diags(Diags), Kind(Kind), IsAux(IsAux) {}
- virtual ~MangleContext() { }
+ virtual ~MangleContext() {}
ASTContext &getASTContext() const { return Context; }
@@ -82,10 +79,10 @@ class MangleContext {
virtual void startNewFunction() { LocalBlockIds.clear(); }
unsigned getBlockId(const BlockDecl *BD, bool Local) {
- llvm::DenseMap<const BlockDecl *, unsigned> &BlockIds
- = Local? LocalBlockIds : GlobalBlockIds;
+ llvm::DenseMap<const BlockDecl *, unsigned> &BlockIds =
+ Local ? LocalBlockIds : GlobalBlockIds;
std::pair<llvm::DenseMap<const BlockDecl *, unsigned>::iterator, bool>
- Result = BlockIds.insert(std::make_pair(BD, BlockIds.size()));
+ Result = BlockIds.insert(std::make_pair(BD, BlockIds.size()));
return Result.first->second;
}
@@ -125,7 +122,7 @@ class MangleContext {
return false;
}
- virtual void needsUniqueInternalLinkageNames() { }
+ virtual void needsUniqueInternalLinkageNames() {}
// FIXME: consider replacing raw_ostream & with something like SmallString &.
void mangleName(GlobalDecl GD, raw_ostream &);
@@ -143,10 +140,9 @@ class MangleContext {
virtual void mangleCXXRTTIName(QualType T, raw_ostream &,
bool NormalizeIntegers = false) = 0;
virtual void mangleStringLiteral(const StringLiteral *SL, raw_ostream &) = 0;
- virtual void mangleMSGuidDecl(const MSGuidDecl *GD, raw_ostream&);
+ virtual void mangleMSGuidDecl(const MSGuidDecl *GD, raw_ostream &);
- void mangleGlobalBlock(const BlockDecl *BD,
- const NamedDecl *ID,
+ void mangleGlobalBlock(const BlockDecl *BD, const NamedDecl *ID,
raw_ostream &Out);
void mangleCtorBlock(const CXXConstructorDecl *CD, CXXCtorType CT,
const BlockDecl *BD, raw_ostream &Out);
@@ -314,6 +310,6 @@ class ASTNameGenerator {
class Implementation;
std::unique_ptr<Implementation> Impl;
};
-}
+} // namespace clang
#endif
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index dd900f9b32fb7..4f5e1ae37eb10 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -63,7 +63,7 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getMessageSendFn() const {
// Add the non-lazy-bind attribute, since objc_msgSend is likely to
// be called a lot.
- llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy };
+ llvm::Type *params[] = {ObjectPtrTy, SelectorPtrTy};
return CGM.CreateRuntimeFunction(
llvm::FunctionType::get(ObjectPtrTy, params, true), "objc_msgSend",
llvm::AttributeList::get(CGM.getLLVMContext(),
@@ -77,10 +77,10 @@ class ObjCCommonTypesHelper {
/// by indirect reference in the first argument, and therefore the
/// self and selector parameters are shifted over by one.
llvm::FunctionCallee getMessageSendStretFn() const {
- llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.VoidTy,
- params, true),
- "objc_msgSend_stret");
+ llvm::Type *params[] = {ObjectPtrTy, SelectorPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(CGM.VoidTy, params, true),
+ "objc_msgSend_stret");
}
/// [double | long double] objc_msgSend_fpret(id self, SEL op, ...)
@@ -89,10 +89,10 @@ class ObjCCommonTypesHelper {
/// floating-point stack; without a special entrypoint, the nil case
/// would be unbalanced.
llvm::FunctionCallee getMessageSendFpretFn() const {
- llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.DoubleTy,
- params, true),
- "objc_msgSend_fpret");
+ llvm::Type *params[] = {ObjectPtrTy, SelectorPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(CGM.DoubleTy, params, true),
+ "objc_msgSend_fpret");
}
/// _Complex long double objc_msgSend_fp2ret(id self, SEL op, ...)
@@ -101,14 +101,14 @@ class ObjCCommonTypesHelper {
/// x87 floating point stack; without a special entrypoint, the nil case
/// would be unbalanced. Only used on 64-bit X86.
llvm::FunctionCallee getMessageSendFp2retFn() const {
- llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy };
+ llvm::Type *params[] = {ObjectPtrTy, SelectorPtrTy};
llvm::Type *longDoubleType = llvm::Type::getX86_FP80Ty(VMContext);
llvm::Type *resultType =
llvm::StructType::get(longDoubleType, longDoubleType);
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(resultType,
- params, true),
- "objc_msgSend_fp2ret");
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(resultType, params, true),
+ "objc_msgSend_fp2ret");
}
/// id objc_msgSendSuper(struct objc_super *super, SEL op, ...)
@@ -117,10 +117,10 @@ class ObjCCommonTypesHelper {
/// semantics. The class passed is the superclass of the current
/// class.
llvm::FunctionCallee getMessageSendSuperFn() const {
- llvm::Type *params[] = { SuperPtrTy, SelectorPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, true),
- "objc_msgSendSuper");
+ llvm::Type *params[] = {SuperPtrTy, SelectorPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, true),
+ "objc_msgSendSuper");
}
/// id objc_msgSendSuper2(struct objc_super *super, SEL op, ...)
@@ -128,10 +128,10 @@ class ObjCCommonTypesHelper {
/// A slightly different messenger used for super calls. The class
/// passed is the current class.
llvm::FunctionCallee getMessageSendSuperFn2() const {
- llvm::Type *params[] = { SuperPtrTy, SelectorPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, true),
- "objc_msgSendSuper2");
+ llvm::Type *params[] = {SuperPtrTy, SelectorPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, true),
+ "objc_msgSendSuper2");
}
/// void objc_msgSendSuper_stret(void *stretAddr, struct objc_super *super,
@@ -139,10 +139,10 @@ class ObjCCommonTypesHelper {
///
/// The messenger used for super calls which return an aggregate indirectly.
llvm::FunctionCallee getMessageSendSuperStretFn() const {
- llvm::Type *params[] = { Int8PtrTy, SuperPtrTy, SelectorPtrTy };
+ llvm::Type *params[] = {Int8PtrTy, SuperPtrTy, SelectorPtrTy};
return CGM.CreateRuntimeFunction(
- llvm::FunctionType::get(CGM.VoidTy, params, true),
- "objc_msgSendSuper_stret");
+ llvm::FunctionType::get(CGM.VoidTy, params, true),
+ "objc_msgSendSuper_stret");
}
/// void objc_msgSendSuper2_stret(void * stretAddr, struct objc_super *super,
@@ -150,10 +150,10 @@ class ObjCCommonTypesHelper {
///
/// objc_msgSendSuper_stret with the super2 semantics.
llvm::FunctionCallee getMessageSendSuperStretFn2() const {
- llvm::Type *params[] = { Int8PtrTy, SuperPtrTy, SelectorPtrTy };
+ llvm::Type *params[] = {Int8PtrTy, SuperPtrTy, SelectorPtrTy};
return CGM.CreateRuntimeFunction(
- llvm::FunctionType::get(CGM.VoidTy, params, true),
- "objc_msgSendSuper2_stret");
+ llvm::FunctionType::get(CGM.VoidTy, params, true),
+ "objc_msgSendSuper2_stret");
}
llvm::FunctionCallee getMessageSendSuperFpretFn() const {
@@ -240,9 +240,8 @@ class ObjCCommonTypesHelper {
CanQualType Params[] = {
IdType, SelType,
Ctx.getPointerDiffType()->getCanonicalTypeUnqualified(), Ctx.BoolTy};
- llvm::FunctionType *FTy =
- Types.GetFunctionType(
- Types.arrangeBuiltinFunctionDeclaration(IdType, Params));
+ llvm::FunctionType *FTy = Types.GetFunctionType(
+ Types.arrangeBuiltinFunctionDeclaration(IdType, Params));
return CGM.CreateRuntimeFunction(FTy, "objc_getProperty");
}
@@ -259,9 +258,8 @@ class ObjCCommonTypesHelper {
IdType,
Ctx.BoolTy,
Ctx.BoolTy};
- llvm::FunctionType *FTy =
- Types.GetFunctionType(
- Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
+ llvm::FunctionType *FTy = Types.GetFunctionType(
+ Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
return CGM.CreateRuntimeFunction(FTy, "objc_setProperty");
}
@@ -277,16 +275,15 @@ class ObjCCommonTypesHelper {
// void objc_setProperty_nonatomic_copy(id self, SEL _cmd,
// id newValue, ptrdiff_t offset);
- SmallVector<CanQualType,4> Params;
+ SmallVector<CanQualType, 4> Params;
CanQualType IdType = Ctx.getCanonicalParamType(Ctx.getObjCIdType());
CanQualType SelType = Ctx.getCanonicalParamType(Ctx.getObjCSelType());
Params.push_back(IdType);
Params.push_back(SelType);
Params.push_back(IdType);
Params.push_back(Ctx.getPointerDiffType()->getCanonicalTypeUnqualified());
- llvm::FunctionType *FTy =
- Types.GetFunctionType(
- Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
+ llvm::FunctionType *FTy = Types.GetFunctionType(
+ Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
const char *name;
if (atomic && copy)
name = "objc_setProperty_atomic_copy";
@@ -304,15 +301,14 @@ class ObjCCommonTypesHelper {
CodeGen::CodeGenTypes &Types = CGM.getTypes();
ASTContext &Ctx = CGM.getContext();
// void objc_copyStruct (void *, const void *, size_t, bool, bool)
- SmallVector<CanQualType,5> Params;
+ SmallVector<CanQualType, 5> Params;
Params.push_back(Ctx.VoidPtrTy);
Params.push_back(Ctx.VoidPtrTy);
Params.push_back(Ctx.getSizeType());
Params.push_back(Ctx.BoolTy);
Params.push_back(Ctx.BoolTy);
- llvm::FunctionType *FTy =
- Types.GetFunctionType(
- Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
+ llvm::FunctionType *FTy = Types.GetFunctionType(
+ Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
return CGM.CreateRuntimeFunction(FTy, "objc_copyStruct");
}
@@ -323,14 +319,14 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getCppAtomicObjectFunction() {
CodeGen::CodeGenTypes &Types = CGM.getTypes();
ASTContext &Ctx = CGM.getContext();
- /// void objc_copyCppObjectAtomic(void *dest, const void *src, void *helper);
- SmallVector<CanQualType,3> Params;
+ /// void objc_copyCppObjectAtomic(void *dest, const void *src, void
+ /// *helper);
+ SmallVector<CanQualType, 3> Params;
Params.push_back(Ctx.VoidPtrTy);
Params.push_back(Ctx.VoidPtrTy);
Params.push_back(Ctx.VoidPtrTy);
- llvm::FunctionType *FTy =
- Types.GetFunctionType(
- Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
+ llvm::FunctionType *FTy = Types.GetFunctionType(
+ Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
return CGM.CreateRuntimeFunction(FTy, "objc_copyCppObjectAtomic");
}
@@ -338,11 +334,10 @@ class ObjCCommonTypesHelper {
CodeGen::CodeGenTypes &Types = CGM.getTypes();
ASTContext &Ctx = CGM.getContext();
// void objc_enumerationMutation (id)
- SmallVector<CanQualType,1> Params;
+ SmallVector<CanQualType, 1> Params;
Params.push_back(Ctx.getCanonicalParamType(Ctx.getObjCIdType()));
- llvm::FunctionType *FTy =
- Types.GetFunctionType(
- Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
+ llvm::FunctionType *FTy = Types.GetFunctionType(
+ Types.arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Params));
return CGM.CreateRuntimeFunction(FTy, "objc_enumerationMutation");
}
@@ -350,13 +345,12 @@ class ObjCCommonTypesHelper {
CodeGen::CodeGenTypes &Types = CGM.getTypes();
ASTContext &Ctx = CGM.getContext();
// Class objc_lookUpClass (const char *)
- SmallVector<CanQualType,1> Params;
+ SmallVector<CanQualType, 1> Params;
Params.push_back(
- Ctx.getCanonicalType(Ctx.getPointerType(Ctx.CharTy.withConst())));
+ Ctx.getCanonicalType(Ctx.getPointerType(Ctx.CharTy.withConst())));
llvm::FunctionType *FTy =
Types.GetFunctionType(Types.arrangeBuiltinFunctionDeclaration(
- Ctx.getCanonicalType(Ctx.getObjCClassType()),
- Params));
+ Ctx.getCanonicalType(Ctx.getObjCClassType()), Params));
return CGM.CreateRuntimeFunction(FTy, "objc_lookUpClass");
}
@@ -364,8 +358,7 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getGcReadWeakFn() {
// id objc_read_weak (id *)
llvm::Type *args[] = {CGM.UnqualPtrTy};
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(ObjectPtrTy, args, false);
+ llvm::FunctionType *FTy = llvm::FunctionType::get(ObjectPtrTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_read_weak");
}
@@ -373,8 +366,7 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getGcAssignWeakFn() {
// id objc_assign_weak (id, id *)
llvm::Type *args[] = {ObjectPtrTy, CGM.UnqualPtrTy};
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(ObjectPtrTy, args, false);
+ llvm::FunctionType *FTy = llvm::FunctionType::get(ObjectPtrTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_assign_weak");
}
@@ -382,8 +374,7 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getGcAssignGlobalFn() {
// id objc_assign_global(id, id *)
llvm::Type *args[] = {ObjectPtrTy, CGM.UnqualPtrTy};
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(ObjectPtrTy, args, false);
+ llvm::FunctionType *FTy = llvm::FunctionType::get(ObjectPtrTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_assign_global");
}
@@ -391,8 +382,7 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getGcAssignThreadLocalFn() {
// id objc_assign_threadlocal(id src, id * dest)
llvm::Type *args[] = {ObjectPtrTy, CGM.UnqualPtrTy};
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(ObjectPtrTy, args, false);
+ llvm::FunctionType *FTy = llvm::FunctionType::get(ObjectPtrTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_assign_threadlocal");
}
@@ -400,15 +390,14 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getGcAssignIvarFn() {
// id objc_assign_ivar(id, id *, ptrdiff_t)
llvm::Type *args[] = {ObjectPtrTy, CGM.UnqualPtrTy, CGM.PtrDiffTy};
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(ObjectPtrTy, args, false);
+ llvm::FunctionType *FTy = llvm::FunctionType::get(ObjectPtrTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_assign_ivar");
}
/// GcMemmoveCollectableFn -- LLVM objc_memmove_collectable function.
llvm::FunctionCallee GcMemmoveCollectableFn() {
// void *objc_memmove_collectable(void *dst, const void *src, size_t size)
- llvm::Type *args[] = { Int8PtrTy, Int8PtrTy, LongTy };
+ llvm::Type *args[] = {Int8PtrTy, Int8PtrTy, LongTy};
llvm::FunctionType *FTy = llvm::FunctionType::get(Int8PtrTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_memmove_collectable");
}
@@ -417,17 +406,15 @@ class ObjCCommonTypesHelper {
llvm::FunctionCallee getGcAssignStrongCastFn() {
// id objc_assign_strongCast(id, id *)
llvm::Type *args[] = {ObjectPtrTy, CGM.UnqualPtrTy};
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(ObjectPtrTy, args, false);
+ llvm::FunctionType *FTy = llvm::FunctionType::get(ObjectPtrTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_assign_strongCast");
}
/// ExceptionThrowFn - LLVM objc_exception_throw function.
llvm::FunctionCallee getExceptionThrowFn() {
// void objc_exception_throw(id)
- llvm::Type *args[] = { ObjectPtrTy };
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.VoidTy, args, false);
+ llvm::Type *args[] = {ObjectPtrTy};
+ llvm::FunctionType *FTy = llvm::FunctionType::get(CGM.VoidTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_exception_throw");
}
@@ -441,18 +428,16 @@ class ObjCCommonTypesHelper {
/// SyncEnterFn - LLVM object_sync_enter function.
llvm::FunctionCallee getSyncEnterFn() {
// int objc_sync_enter (id)
- llvm::Type *args[] = { ObjectPtrTy };
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.IntTy, args, false);
+ llvm::Type *args[] = {ObjectPtrTy};
+ llvm::FunctionType *FTy = llvm::FunctionType::get(CGM.IntTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_sync_enter");
}
/// SyncExitFn - LLVM object_sync_exit function.
llvm::FunctionCallee getSyncExitFn() {
// int objc_sync_exit (id)
- llvm::Type *args[] = { ObjectPtrTy };
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.IntTy, args, false);
+ llvm::Type *args[] = {ObjectPtrTy};
+ llvm::FunctionType *FTy = llvm::FunctionType::get(CGM.IntTy, args, false);
return CGM.CreateRuntimeFunction(FTy, "objc_sync_exit");
}
@@ -553,32 +538,32 @@ class ObjCTypesHelper : public ObjCCommonTypesHelper {
llvm::FunctionCallee getExceptionTryEnterFn() {
llvm::Type *params[] = {CGM.UnqualPtrTy};
return CGM.CreateRuntimeFunction(
- llvm::FunctionType::get(CGM.VoidTy, params, false),
- "objc_exception_try_enter");
+ llvm::FunctionType::get(CGM.VoidTy, params, false),
+ "objc_exception_try_enter");
}
/// ExceptionTryExitFn - LLVM objc_exception_try_exit function.
llvm::FunctionCallee getExceptionTryExitFn() {
llvm::Type *params[] = {CGM.UnqualPtrTy};
return CGM.CreateRuntimeFunction(
- llvm::FunctionType::get(CGM.VoidTy, params, false),
- "objc_exception_try_exit");
+ llvm::FunctionType::get(CGM.VoidTy, params, false),
+ "objc_exception_try_exit");
}
/// ExceptionExtractFn - LLVM objc_exception_extract function.
llvm::FunctionCallee getExceptionExtractFn() {
llvm::Type *params[] = {CGM.UnqualPtrTy};
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, false),
- "objc_exception_extract");
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, false),
+ "objc_exception_extract");
}
/// ExceptionMatchFn - LLVM objc_exception_match function.
llvm::FunctionCallee getExceptionMatchFn() {
- llvm::Type *params[] = { ClassPtrTy, ObjectPtrTy };
+ llvm::Type *params[] = {ClassPtrTy, ObjectPtrTy};
return CGM.CreateRuntimeFunction(
- llvm::FunctionType::get(CGM.Int32Ty, params, false),
- "objc_exception_match");
+ llvm::FunctionType::get(CGM.Int32Ty, params, false),
+ "objc_exception_match");
}
/// SetJmpFn - LLVM _setjmp function.
@@ -670,44 +655,44 @@ class ObjCNonFragileABITypesHelper : public ObjCCommonTypesHelper {
llvm::FunctionCallee getMessageSendFixupFn() {
// id objc_msgSend_fixup(id, struct message_ref_t*, ...)
- llvm::Type *params[] = { ObjectPtrTy, MessageRefPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, true),
- "objc_msgSend_fixup");
+ llvm::Type *params[] = {ObjectPtrTy, MessageRefPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, true),
+ "objc_msgSend_fixup");
}
llvm::FunctionCallee getMessageSendFpretFixupFn() {
// id objc_msgSend_fpret_fixup(id, struct message_ref_t*, ...)
- llvm::Type *params[] = { ObjectPtrTy, MessageRefPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, true),
- "objc_msgSend_fpret_fixup");
+ llvm::Type *params[] = {ObjectPtrTy, MessageRefPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, true),
+ "objc_msgSend_fpret_fixup");
}
llvm::FunctionCallee getMessageSendStretFixupFn() {
// id objc_msgSend_stret_fixup(id, struct message_ref_t*, ...)
- llvm::Type *params[] = { ObjectPtrTy, MessageRefPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, true),
- "objc_msgSend_stret_fixup");
+ llvm::Type *params[] = {ObjectPtrTy, MessageRefPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, true),
+ "objc_msgSend_stret_fixup");
}
llvm::FunctionCallee getMessageSendSuper2FixupFn() {
// id objc_msgSendSuper2_fixup (struct objc_super *,
// struct _super_message_ref_t*, ...)
- llvm::Type *params[] = { SuperPtrTy, SuperMessageRefPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, true),
- "objc_msgSendSuper2_fixup");
+ llvm::Type *params[] = {SuperPtrTy, SuperMessageRefPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, true),
+ "objc_msgSendSuper2_fixup");
}
llvm::FunctionCallee getMessageSendSuper2StretFixupFn() {
// id objc_msgSendSuper2_stret_fixup(struct objc_super *,
// struct _super_message_ref_t*, ...)
- llvm::Type *params[] = { SuperPtrTy, SuperMessageRefPtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- params, true),
- "objc_msgSendSuper2_stret_fixup");
+ llvm::Type *params[] = {SuperPtrTy, SuperMessageRefPtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(ObjectPtrTy, params, true),
+ "objc_msgSendSuper2_stret_fixup");
}
llvm::FunctionCallee getObjCEndCatchFn() {
@@ -716,10 +701,9 @@ class ObjCNonFragileABITypesHelper : public ObjCCommonTypesHelper {
}
llvm::FunctionCallee getObjCBeginCatchFn() {
- llvm::Type *params[] = { Int8PtrTy };
- return CGM.CreateRuntimeFunction(llvm::FunctionType::get(Int8PtrTy,
- params, false),
- "objc_begin_catch");
+ llvm::Type *params[] = {Int8PtrTy};
+ return CGM.CreateRuntimeFunction(
+ llvm::FunctionType::get(Int8PtrTy, params, false), "objc_begin_catch");
}
/// Class objc_loadClassref (void *)
@@ -733,21 +717,23 @@ class ObjCNonFragileABITypesHelper : public ObjCCommonTypesHelper {
//
// Also it is safe to make it readnone, since we never load or store the
// classref except by calling this function.
- llvm::Type *params[] = { Int8PtrPtrTy };
+ llvm::Type *params[] = {Int8PtrPtrTy};
llvm::LLVMContext &C = CGM.getLLVMContext();
- llvm::AttributeSet AS = llvm::AttributeSet::get(C, {
- llvm::Attribute::get(C, llvm::Attribute::NonLazyBind),
- llvm::Attribute::getWithMemoryEffects(C, llvm::MemoryEffects::none()),
- llvm::Attribute::get(C, llvm::Attribute::NoUnwind),
- });
+ llvm::AttributeSet AS = llvm::AttributeSet::get(
+ C, {
+ llvm::Attribute::get(C, llvm::Attribute::NonLazyBind),
+ llvm::Attribute::getWithMemoryEffects(
+ C, llvm::MemoryEffects::none()),
+ llvm::Attribute::get(C, llvm::Attribute::NoUnwind),
+ });
llvm::FunctionCallee F = CGM.CreateRuntimeFunction(
llvm::FunctionType::get(ClassnfABIPtrTy, params, false),
"objc_loadClassref",
llvm::AttributeList::get(CGM.getLLVMContext(),
llvm::AttributeList::FunctionIndex, AS));
if (!CGM.getTriple().isOSBinFormatCOFF())
- cast<llvm::Function>(F.getCallee())->setLinkage(
- llvm::Function::ExternalWeakLinkage);
+ cast<llvm::Function>(F.getCallee())
+ ->setLinkage(llvm::Function::ExternalWeakLinkage);
return F;
}
@@ -772,7 +758,7 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
unsigned skip;
unsigned scan;
SKIP_SCAN(unsigned _skip = 0, unsigned _scan = 0)
- : skip(_skip), scan(_scan) {}
+ : skip(_skip), scan(_scan) {}
};
/// opcode for captured block variables layout 'instructions'.
@@ -786,33 +772,33 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
/// a non-pointer. Note that this instruction is equal
/// to '\0'.
/// I != 0: Currently unused.
- BLOCK_LAYOUT_OPERATOR = 0,
+ BLOCK_LAYOUT_OPERATOR = 0,
/// The next I+1 bytes do not contain a value of object pointer type.
/// Note that this can leave the stream unaligned, meaning that
/// subsequent word-size instructions do not begin at a multiple of
/// the pointer size.
- BLOCK_LAYOUT_NON_OBJECT_BYTES = 1,
+ BLOCK_LAYOUT_NON_OBJECT_BYTES = 1,
/// The next I+1 words do not contain a value of object pointer type.
/// This is simply an optimized version of BLOCK_LAYOUT_BYTES for
/// when the required skip quantity is a multiple of the pointer size.
- BLOCK_LAYOUT_NON_OBJECT_WORDS = 2,
+ BLOCK_LAYOUT_NON_OBJECT_WORDS = 2,
/// The next I+1 words are __strong pointers to Objective-C
/// objects or blocks.
- BLOCK_LAYOUT_STRONG = 3,
+ BLOCK_LAYOUT_STRONG = 3,
/// The next I+1 words are pointers to __block variables.
- BLOCK_LAYOUT_BYREF = 4,
+ BLOCK_LAYOUT_BYREF = 4,
/// The next I+1 words are __weak pointers to Objective-C
/// objects or blocks.
- BLOCK_LAYOUT_WEAK = 5,
+ BLOCK_LAYOUT_WEAK = 5,
/// The next I+1 words are __unsafe_unretained pointers to
/// Objective-C objects or blocks.
- BLOCK_LAYOUT_UNRETAINED = 6
+ BLOCK_LAYOUT_UNRETAINED = 6
/// The next I+1 words are block or object pointers with some
/// as-yet-unspecified ownership semantics. If we add more
@@ -821,7 +807,7 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
///
/// This is included so that older tools can at least continue
/// processing the layout past such things.
- //BLOCK_LAYOUT_OWNERSHIP_UNKNOWN = 7..10,
+ // BLOCK_LAYOUT_OWNERSHIP_UNKNOWN = 7..10,
/// All other opcodes are reserved. Halt interpretation and
/// treat everything else as opaque.
@@ -835,7 +821,7 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
RUN_SKIP(enum BLOCK_LAYOUT_OPCODE Opcode = BLOCK_LAYOUT_OPERATOR,
CharUnits BytePos = CharUnits::Zero(),
CharUnits Size = CharUnits::Zero())
- : opcode(Opcode), block_var_bytepos(BytePos), block_var_size(Size) {}
+ : opcode(Opcode), block_var_bytepos(BytePos), block_var_size(Size) {}
// Allow sorting based on byte pos.
bool operator<(const RUN_SKIP &b) const {
@@ -853,70 +839,71 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
/// LazySymbols - Symbols to generate a lazy reference for. See
/// DefinedSymbols and FinishModule().
- llvm::SetVector<IdentifierInfo*> LazySymbols;
+ llvm::SetVector<IdentifierInfo *> LazySymbols;
/// DefinedSymbols - External symbols which are defined by this
/// module. The symbols in this list and LazySymbols are used to add
/// special linker symbols which ensure that Objective-C modules are
/// linked properly.
- llvm::SetVector<IdentifierInfo*> DefinedSymbols;
+ llvm::SetVector<IdentifierInfo *> DefinedSymbols;
/// ClassNames - uniqued class names.
- llvm::StringMap<llvm::GlobalVariable*> ClassNames;
+ llvm::StringMap<llvm::GlobalVariable *> ClassNames;
/// MethodVarNames - uniqued method variable names.
- llvm::DenseMap<Selector, llvm::GlobalVariable*> MethodVarNames;
+ llvm::DenseMap<Selector, llvm::GlobalVariable *> MethodVarNames;
/// DefinedCategoryNames - list of category names in form Class_Category.
llvm::SmallSetVector<llvm::CachedHashString, 16> DefinedCategoryNames;
/// MethodVarTypes - uniqued method type signatures. We have to use
/// a StringMap here because have no other unique reference.
- llvm::StringMap<llvm::GlobalVariable*> MethodVarTypes;
+ llvm::StringMap<llvm::GlobalVariable *> MethodVarTypes;
/// MethodDefinitions - map of methods which have been defined in
/// this translation unit.
- llvm::DenseMap<const ObjCMethodDecl*, llvm::Function*> MethodDefinitions;
+ llvm::DenseMap<const ObjCMethodDecl *, llvm::Function *> MethodDefinitions;
/// DirectMethodDefinitions - map of direct methods which have been defined in
/// this translation unit.
- llvm::DenseMap<const ObjCMethodDecl*, llvm::Function*> DirectMethodDefinitions;
+ llvm::DenseMap<const ObjCMethodDecl *, llvm::Function *>
+ DirectMethodDefinitions;
/// PropertyNames - uniqued method variable names.
- llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> PropertyNames;
+ llvm::DenseMap<IdentifierInfo *, llvm::GlobalVariable *> PropertyNames;
/// ClassReferences - uniqued class references.
- llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> ClassReferences;
+ llvm::DenseMap<IdentifierInfo *, llvm::GlobalVariable *> ClassReferences;
/// SelectorReferences - uniqued selector references.
- llvm::DenseMap<Selector, llvm::GlobalVariable*> SelectorReferences;
+ llvm::DenseMap<Selector, llvm::GlobalVariable *> SelectorReferences;
/// Protocols - Protocols for which an objc_protocol structure has
/// been emitted. Forward declarations are handled by creating an
/// empty structure whose initializer is filled in when/if defined.
- llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> Protocols;
+ llvm::DenseMap<IdentifierInfo *, llvm::GlobalVariable *> Protocols;
/// DefinedProtocols - Protocols which have actually been
/// defined. We should not need this, see FIXME in GenerateProtocol.
- llvm::DenseSet<IdentifierInfo*> DefinedProtocols;
+ llvm::DenseSet<IdentifierInfo *> DefinedProtocols;
/// DefinedClasses - List of defined classes.
- SmallVector<llvm::GlobalValue*, 16> DefinedClasses;
+ SmallVector<llvm::GlobalValue *, 16> DefinedClasses;
/// ImplementedClasses - List of @implemented classes.
- SmallVector<const ObjCInterfaceDecl*, 16> ImplementedClasses;
+ SmallVector<const ObjCInterfaceDecl *, 16> ImplementedClasses;
/// DefinedNonLazyClasses - List of defined "non-lazy" classes.
- SmallVector<llvm::GlobalValue*, 16> DefinedNonLazyClasses;
+ SmallVector<llvm::GlobalValue *, 16> DefinedNonLazyClasses;
/// DefinedCategories - List of defined categories.
- SmallVector<llvm::GlobalValue*, 16> DefinedCategories;
+ SmallVector<llvm::GlobalValue *, 16> DefinedCategories;
/// DefinedStubCategories - List of defined categories on class stubs.
- SmallVector<llvm::GlobalValue*, 16> DefinedStubCategories;
+ SmallVector<llvm::GlobalValue *, 16> DefinedStubCategories;
/// DefinedNonLazyCategories - List of defined "non-lazy" categories.
- SmallVector<llvm::GlobalValue*, 16> DefinedNonLazyCategories;
+ SmallVector<llvm::GlobalValue *, 16> DefinedNonLazyCategories;
/// Cached reference to the class for constant strings. This value has type
/// int * but is actually an Obj-C class pointer.
@@ -963,10 +950,8 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
/// building a weak layout. Does not guarantee that the layout will
/// actually have any entries, because the ivar might be under-aligned.
llvm::Constant *BuildIvarLayout(const ObjCImplementationDecl *OI,
- CharUnits beginOffset,
- CharUnits endOffset,
- bool forStrongLayout,
- bool hasMRCWeakIvars);
+ CharUnits beginOffset, CharUnits endOffset,
+ bool forStrongLayout, bool hasMRCWeakIvars);
llvm::Constant *BuildStrongIvarLayout(const ObjCImplementationDecl *OI,
CharUnits beginOffset,
@@ -981,22 +966,19 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
return BuildIvarLayout(OI, beginOffset, endOffset, false, hasMRCWeakIvars);
}
- Qualifiers::ObjCLifetime getBlockCaptureLifetime(QualType QT, bool ByrefLayout);
+ Qualifiers::ObjCLifetime getBlockCaptureLifetime(QualType QT,
+ bool ByrefLayout);
- void UpdateRunSkipBlockVars(bool IsByref,
- Qualifiers::ObjCLifetime LifeTime,
- CharUnits FieldOffset,
- CharUnits FieldSize);
+ void UpdateRunSkipBlockVars(bool IsByref, Qualifiers::ObjCLifetime LifeTime,
+ CharUnits FieldOffset, CharUnits FieldSize);
- void BuildRCBlockVarRecordLayout(const RecordType *RT,
- CharUnits BytePos, bool &HasUnion,
- bool ByrefLayout=false);
+ void BuildRCBlockVarRecordLayout(const RecordType *RT, CharUnits BytePos,
+ bool &HasUnion, bool ByrefLayout = false);
void BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
const RecordDecl *RD,
- ArrayRef<const FieldDecl*> RecFields,
- CharUnits BytePos, bool &HasUnion,
- bool ByrefLayout);
+ ArrayRef<const FieldDecl *> RecFields,
+ CharUnits BytePos, bool &HasUnion, bool ByrefLayout);
uint64_t InlineLayoutInstruction(SmallVectorImpl<unsigned char> &Layout);
@@ -1009,17 +991,16 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
/// EmitPropertyList - Emit the given property list. The return
/// value has type PropertyListPtrTy.
- llvm::Constant *EmitPropertyList(Twine Name,
- const Decl *Container,
+ llvm::Constant *EmitPropertyList(Twine Name, const Decl *Container,
const ObjCContainerDecl *OCD,
const ObjCCommonTypesHelper &ObjCTypes,
bool IsClassProperty);
/// EmitProtocolMethodTypes - Generate the array of extended method type
/// strings. The return value has type Int8PtrPtrTy.
- llvm::Constant *EmitProtocolMethodTypes(Twine Name,
- ArrayRef<llvm::Constant*> MethodTypes,
- const ObjCCommonTypesHelper &ObjCTypes);
+ llvm::Constant *
+ EmitProtocolMethodTypes(Twine Name, ArrayRef<llvm::Constant *> MethodTypes,
+ const ObjCCommonTypesHelper &ObjCTypes);
/// GetProtocolRef - Return a reference to the internal protocol
/// description, creating an empty one if it has not been
@@ -1053,8 +1034,7 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
ConstantStructBuilder &Init,
StringRef Section, CharUnits Align,
bool AddToUsed);
- llvm::GlobalVariable *CreateMetadataVar(Twine Name,
- llvm::Constant *Init,
+ llvm::GlobalVariable *CreateMetadataVar(Twine Name, llvm::Constant *Init,
StringRef Section, CharUnits Align,
bool AddToUsed);
@@ -1065,12 +1045,9 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
protected:
CodeGen::RValue EmitMessageSend(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- llvm::Value *Arg0,
- QualType Arg0Ty,
- bool IsSuper,
+ ReturnValueSlot Return, QualType ResultType,
+ Selector Sel, llvm::Value *Arg0,
+ QualType Arg0Ty, bool IsSuper,
const CallArgList &CallArgs,
const ObjCMethodDecl *OMD,
const ObjCInterfaceDecl *ClassReceiver,
@@ -1084,15 +1061,14 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
CGObjCCommonMac(CodeGen::CodeGenModule &cgm)
: CGObjCRuntime(cgm), VMContext(cgm.getLLVMContext()) {}
- bool isNonFragileABI() const {
- return ObjCABI == 2;
- }
+ bool isNonFragileABI() const { return ObjCABI == 2; }
ConstantAddress GenerateConstantString(const StringLiteral *SL) override;
ConstantAddress GenerateConstantNSString(const StringLiteral *SL);
- llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD,
- const ObjCContainerDecl *CD=nullptr) override;
+ llvm::Function *
+ GenerateMethod(const ObjCMethodDecl *OMD,
+ const ObjCContainerDecl *CD = nullptr) override;
llvm::Function *GenerateDirectMethod(const ObjCMethodDecl *OMD,
const ObjCContainerDecl *CD);
@@ -1107,7 +1083,7 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
/// object for the given declaration, emitting it if needed. These
/// forward references will be filled in with empty bodies if no
/// definition is seen. The return value has type ProtocolPtrTy.
- virtual llvm::Constant *GetOrEmitProtocolRef(const ObjCProtocolDecl *PD)=0;
+ virtual llvm::Constant *GetOrEmitProtocolRef(const ObjCProtocolDecl *PD) = 0;
virtual llvm::Constant *getNSConstantStringClassRef() = 0;
@@ -1148,9 +1124,7 @@ class ProtocolMethodLists {
OptionalInstanceMethods,
OptionalClassMethods
};
- enum {
- NumProtocolMethodLists = 4
- };
+ enum { NumProtocolMethodLists = 4 };
static MethodListType getMethodListKind(Kind kind) {
switch (kind) {
@@ -1172,8 +1146,8 @@ class ProtocolMethodLists {
ProtocolMethodLists result;
for (auto *MD : PD->methods()) {
- size_t index = (2 * size_t(MD->isOptional()))
- + (size_t(MD->isClassMethod()));
+ size_t index =
+ (2 * size_t(MD->isOptional())) + (size_t(MD->isClassMethod()));
result.Methods[index].push_back(MD);
}
@@ -1181,14 +1155,14 @@ class ProtocolMethodLists {
}
template <class Self>
- SmallVector<llvm::Constant*, 8> emitExtendedTypesArray(Self *self) const {
+ SmallVector<llvm::Constant *, 8> emitExtendedTypesArray(Self *self) const {
// In both ABIs, the method types list is parallel with the
// concatenation of the methods arrays in the following order:
// instance methods
// class methods
// optional instance methods
// optional class methods
- SmallVector<llvm::Constant*, 8> result;
+ SmallVector<llvm::Constant *, 8> result;
// Methods is already in the correct order for both ABIs.
for (auto &list : Methods) {
@@ -1233,16 +1207,13 @@ class CGObjCMac : public CGObjCCommonMac {
/// has type ClassExtensionPtrTy.
llvm::Constant *EmitClassExtension(const ObjCImplementationDecl *ID,
CharUnits instanceSize,
- bool hasMRCWeakIvars,
- bool isMetaclass);
+ bool hasMRCWeakIvars, bool isMetaclass);
/// EmitClassRef - Return a Value*, of type ObjCTypes.ClassPtrTy,
/// for the given class.
- llvm::Value *EmitClassRef(CodeGenFunction &CGF,
- const ObjCInterfaceDecl *ID);
+ llvm::Value *EmitClassRef(CodeGenFunction &CGF, const ObjCInterfaceDecl *ID);
- llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
- IdentifierInfo *II);
+ llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF, IdentifierInfo *II);
llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
@@ -1254,8 +1225,7 @@ class CGObjCMac : public CGObjCCommonMac {
/// (i.e. metaclass ivars) is emitted, otherwise the list of
/// interface ivars will be emitted. The return value has type
/// IvarListPtrTy.
- llvm::Constant *EmitIvarList(const ObjCImplementationDecl *ID,
- bool ForClass);
+ llvm::Constant *EmitIvarList(const ObjCImplementationDecl *ID, bool ForClass);
/// EmitMetaClass - Emit a forward reference to the class structure
/// for the metaclass of the given interface. The return value has
@@ -1294,9 +1264,8 @@ class CGObjCMac : public CGObjCCommonMac {
/// structure used to store optional instance and class methods, and
/// protocol properties. The return value has type
/// ProtocolExtensionPtrTy.
- llvm::Constant *
- EmitProtocolExtension(const ObjCProtocolDecl *PD,
- const ProtocolMethodLists &methodLists);
+ llvm::Constant *EmitProtocolExtension(const ObjCProtocolDecl *PD,
+ const ProtocolMethodLists &methodLists);
/// EmitProtocolList - Generate the list of referenced
/// protocols. The return value has type ProtocolListPtrTy.
@@ -1318,19 +1287,17 @@ class CGObjCMac : public CGObjCCommonMac {
CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel, llvm::Value *Receiver,
+ QualType ResultType, Selector Sel,
+ llvm::Value *Receiver,
const CallArgList &CallArgs,
const ObjCInterfaceDecl *Class,
const ObjCMethodDecl *Method) override;
- CodeGen::RValue
- GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return, QualType ResultType,
- Selector Sel, const ObjCInterfaceDecl *Class,
- bool isCategoryImpl, llvm::Value *Receiver,
- bool IsClassMessage, const CallArgList &CallArgs,
- const ObjCMethodDecl *Method) override;
+ CodeGen::RValue GenerateMessageSendSuper(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return,
+ QualType ResultType, Selector Sel, const ObjCInterfaceDecl *Class,
+ bool isCategoryImpl, llvm::Value *Receiver, bool IsClassMessage,
+ const CallArgList &CallArgs, const ObjCMethodDecl *Method) override;
llvm::Value *GetClass(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID) override;
@@ -1370,22 +1337,19 @@ class CGObjCMac : public CGObjCCommonMac {
const ObjCAtSynchronizedStmt &S) override;
void EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF, const Stmt &S);
void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
- bool ClearInsertionPoint=true) override;
- llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
- Address AddrWeakObj) override;
- void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dst) override;
- void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dest,
- bool threadlocal = false) override;
- void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dest,
- llvm::Value *ivarOffset) override;
- void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dest) override;
- void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
- Address dest, Address src,
- llvm::Value *size) override;
+ bool ClearInsertionPoint = true) override;
+ llvm::Value *EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
+ Address AddrWeakObj) override;
+ void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address dst) override;
+ void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address dest, bool threadlocal = false) override;
+ void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address dest, llvm::Value *ivarOffset) override;
+ void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address dest) override;
+ void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF, Address dest,
+ Address src, llvm::Value *size) override;
LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
llvm::Value *BaseValue, const ObjCIvarDecl *Ivar,
@@ -1399,24 +1363,24 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
private:
friend ProtocolMethodLists;
ObjCNonFragileABITypesHelper ObjCTypes;
- llvm::GlobalVariable* ObjCEmptyCacheVar;
- llvm::Constant* ObjCEmptyVtableVar;
+ llvm::GlobalVariable *ObjCEmptyCacheVar;
+ llvm::Constant *ObjCEmptyVtableVar;
/// SuperClassReferences - uniqued super class references.
- llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> SuperClassReferences;
+ llvm::DenseMap<IdentifierInfo *, llvm::GlobalVariable *> SuperClassReferences;
/// MetaClassReferences - uniqued meta class references.
- llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> MetaClassReferences;
+ llvm::DenseMap<IdentifierInfo *, llvm::GlobalVariable *> MetaClassReferences;
/// EHTypeReferences - uniqued class ehtype references.
- llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> EHTypeReferences;
+ llvm::DenseMap<IdentifierInfo *, llvm::GlobalVariable *> EHTypeReferences;
/// VTableDispatchMethods - List of methods for which we generate
/// vtable-based message dispatch.
llvm::DenseSet<Selector> VTableDispatchMethods;
/// DefinedMetaClasses - List of defined meta-classes.
- std::vector<llvm::GlobalValue*> DefinedMetaClasses;
+ std::vector<llvm::GlobalValue *> DefinedMetaClasses;
/// isVTableDispatchedSelector - Returns true if SEL is a
/// vtable-based selector.
@@ -1431,20 +1395,17 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
void AddModuleClassList(ArrayRef<llvm::GlobalValue *> Container,
StringRef SymbolName, StringRef SectionName);
- llvm::GlobalVariable * BuildClassRoTInitializer(unsigned flags,
- unsigned InstanceStart,
- unsigned InstanceSize,
- const ObjCImplementationDecl *ID);
- llvm::GlobalVariable *BuildClassObject(const ObjCInterfaceDecl *CI,
- bool isMetaclass,
- llvm::Constant *IsAGV,
- llvm::Constant *SuperClassGV,
- llvm::Constant *ClassRoGV,
- bool HiddenVisibility);
+ llvm::GlobalVariable *
+ BuildClassRoTInitializer(unsigned flags, unsigned InstanceStart,
+ unsigned InstanceSize,
+ const ObjCImplementationDecl *ID);
+ llvm::GlobalVariable *
+ BuildClassObject(const ObjCInterfaceDecl *CI, bool isMetaclass,
+ llvm::Constant *IsAGV, llvm::Constant *SuperClassGV,
+ llvm::Constant *ClassRoGV, bool HiddenVisibility);
void emitMethodConstant(ConstantArrayBuilder &builder,
- const ObjCMethodDecl *MD,
- bool forProtocol);
+ const ObjCMethodDecl *MD, bool forProtocol);
/// Emit the method list for the given implementation. The return value
/// has type MethodListnfABITy.
@@ -1479,23 +1440,17 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
ObjCProtocolDecl::protocol_iterator begin,
ObjCProtocolDecl::protocol_iterator end);
- CodeGen::RValue EmitVTableMessageSend(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- llvm::Value *Receiver,
- QualType Arg0Ty,
- bool IsSuper,
- const CallArgList &CallArgs,
- const ObjCMethodDecl *Method);
+ CodeGen::RValue EmitVTableMessageSend(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return,
+ QualType ResultType, Selector Sel, llvm::Value *Receiver, QualType Arg0Ty,
+ bool IsSuper, const CallArgList &CallArgs, const ObjCMethodDecl *Method);
/// GetClassGlobal - Return the global variable for the Objective-C
/// class of the given name.
llvm::Constant *GetClassGlobal(StringRef Name,
ForDefinition_t IsForDefinition,
bool Weak = false, bool DLLImport = false);
- llvm::Constant *GetClassGlobal(const ObjCInterfaceDecl *ID,
- bool isMetaclass,
+ llvm::Constant *GetClassGlobal(const ObjCInterfaceDecl *ID, bool isMetaclass,
ForDefinition_t isForDefinition);
llvm::Constant *GetClassGlobalForClassRef(const ObjCInterfaceDecl *ID);
@@ -1506,11 +1461,9 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
/// EmitClassRef - Return a Value*, of type ObjCTypes.ClassPtrTy,
/// for the given class reference.
- llvm::Value *EmitClassRef(CodeGenFunction &CGF,
- const ObjCInterfaceDecl *ID);
+ llvm::Value *EmitClassRef(CodeGenFunction &CGF, const ObjCInterfaceDecl *ID);
- llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
- IdentifierInfo *II,
+ llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF, IdentifierInfo *II,
const ObjCInterfaceDecl *ID);
llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
@@ -1528,9 +1481,8 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
/// ObjCIvarOffsetVariable - Returns the ivar offset variable for
/// the given ivar.
///
- llvm::GlobalVariable * ObjCIvarOffsetVariable(
- const ObjCInterfaceDecl *ID,
- const ObjCIvarDecl *Ivar);
+ llvm::GlobalVariable *ObjCIvarOffsetVariable(const ObjCInterfaceDecl *ID,
+ const ObjCIvarDecl *Ivar);
/// EmitSelector - Return a Value*, of type ObjCTypes.SelectorPtrTy,
/// for the given selector.
@@ -1547,16 +1499,15 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
StringRef getClassSymbolPrefix() const { return "OBJC_CLASS_$_"; }
void GetClassSizeInfo(const ObjCImplementationDecl *OID,
- uint32_t &InstanceStart,
- uint32_t &InstanceSize);
+ uint32_t &InstanceStart, uint32_t &InstanceSize);
// Shamelessly stolen from Analysis/CFRefCount.cpp
- Selector GetNullarySelector(const char* name) const {
+ Selector GetNullarySelector(const char *name) const {
const IdentifierInfo *II = &CGM.getContext().Idents.get(name);
return CGM.getContext().Selectors.getSelector(0, &II);
}
- Selector GetUnarySelector(const char* name) const {
+ Selector GetUnarySelector(const char *name) const {
const IdentifierInfo *II = &CGM.getContext().Idents.get(name);
return CGM.getContext().Selectors.getSelector(1, &II);
}
@@ -1582,7 +1533,7 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
// and that the method may be inlined, this optimization actually
// can't be performed.
if (const ObjCMethodDecl *MD =
- dyn_cast_or_null<ObjCMethodDecl>(CGF.CurFuncDecl))
+ dyn_cast_or_null<ObjCMethodDecl>(CGF.CurFuncDecl))
if (MD->isInstanceMethod() && !MD->isDirectMethod())
if (const ObjCInterfaceDecl *ID = MD->getClassInterface())
return IV->getContainingInterface()->isSuperClassOf(ID);
@@ -1621,27 +1572,28 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
const ObjCInterfaceDecl *Class,
const ObjCMethodDecl *Method) override;
- CodeGen::RValue
- GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return, QualType ResultType,
- Selector Sel, const ObjCInterfaceDecl *Class,
- bool isCategoryImpl, llvm::Value *Receiver,
- bool IsClassMessage, const CallArgList &CallArgs,
- const ObjCMethodDecl *Method) override;
+ CodeGen::RValue GenerateMessageSendSuper(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return,
+ QualType ResultType, Selector Sel, const ObjCInterfaceDecl *Class,
+ bool isCategoryImpl, llvm::Value *Receiver, bool IsClassMessage,
+ const CallArgList &CallArgs, const ObjCMethodDecl *Method) override;
llvm::Value *GetClass(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID) override;
- llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override
- { return EmitSelector(CGF, Sel); }
- Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override
- { return EmitSelectorAddr(Sel); }
+ llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override {
+ return EmitSelector(CGF, Sel);
+ }
+ Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override {
+ return EmitSelectorAddr(Sel);
+ }
/// The NeXT/Apple runtimes do not support typed selectors; just emit an
/// untyped one.
llvm::Value *GetSelector(CodeGenFunction &CGF,
- const ObjCMethodDecl *Method) override
- { return EmitSelector(CGF, Method->getSelector()); }
+ const ObjCMethodDecl *Method) override {
+ return EmitSelector(CGF, Method->getSelector());
+ }
void GenerateCategory(const ObjCCategoryImplDecl *CMD) override;
@@ -1691,22 +1643,19 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
const ObjCAtSynchronizedStmt &S) override;
void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
- bool ClearInsertionPoint=true) override;
- llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
- Address AddrWeakObj) override;
- void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address edst) override;
- void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dest,
- bool threadlocal = false) override;
- void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dest,
- llvm::Value *ivarOffset) override;
- void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dest) override;
- void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
- Address dest, Address src,
- llvm::Value *size) override;
+ bool ClearInsertionPoint = true) override;
+ llvm::Value *EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
+ Address AddrWeakObj) override;
+ void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address edst) override;
+ void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address dest, bool threadlocal = false) override;
+ void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address dest, llvm::Value *ivarOffset) override;
+ void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF, llvm::Value *src,
+ Address dest) override;
+ void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF, Address dest,
+ Address src, llvm::Value *size) override;
LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
llvm::Value *BaseValue, const ObjCIvarDecl *Ivar,
unsigned CVRQualifiers) override;
@@ -1740,14 +1689,12 @@ struct NullReturnState {
/// Complete the null-return operation. It is valid to call this
/// regardless of whether 'init' has been called.
- RValue complete(CodeGenFunction &CGF,
- ReturnValueSlot returnSlot,
- RValue result,
- QualType resultType,
- const CallArgList &CallArgs,
- const ObjCMethodDecl *Method) {
+ RValue complete(CodeGenFunction &CGF, ReturnValueSlot returnSlot,
+ RValue result, QualType resultType,
+ const CallArgList &CallArgs, const ObjCMethodDecl *Method) {
// If we never had to do a null-check, just use the raw result.
- if (!NullBB) return result;
+ if (!NullBB)
+ return result;
// The continuation block. This will be left null if we don't have an
// IP, which can happen if the method we're calling is marked noreturn.
@@ -1774,7 +1721,8 @@ struct NullReturnState {
// If we've got a void return, just jump to the continuation block.
if (result.isScalar() && resultType->isVoidType()) {
// No jumps required if the message-send was noreturn.
- if (contBB) CGF.EmitBlock(contBB);
+ if (contBB)
+ CGF.EmitBlock(contBB);
return result;
}
@@ -1785,7 +1733,8 @@ struct NullReturnState {
CGF.EmitFromMemory(CGF.CGM.EmitNullConstant(resultType), resultType);
// If no join is necessary, just flow out.
- if (!contBB) return RValue::get(null);
+ if (!contBB)
+ return RValue::get(null);
// Otherwise, build a phi.
CGF.EmitBlock(contBB);
@@ -1803,7 +1752,8 @@ struct NullReturnState {
assert(result.isAggregate() && "null init of non-aggregate result?");
if (!returnSlot.isUnused())
CGF.EmitNullInitialization(result.getAggregateAddress(), resultType);
- if (contBB) CGF.EmitBlock(contBB);
+ if (contBB)
+ CGF.EmitBlock(contBB);
return result;
}
@@ -1835,9 +1785,8 @@ static llvm::Constant *getConstantGEP(llvm::LLVMContext &VMContext,
llvm::GlobalVariable *C, unsigned idx0,
unsigned idx1) {
llvm::Value *Idxs[] = {
- llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), idx0),
- llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), idx1)
- };
+ llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), idx0),
+ llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), idx1)};
return llvm::ConstantExpr::getGetElementPtr(C->getValueType(), C, Idxs);
}
@@ -1863,7 +1812,7 @@ getLinkageTypeForObjCMetadata(CodeGenModule &CGM, StringRef Section) {
/// A helper function to create an internal or private global variable.
static llvm::GlobalVariable *
finishAndCreateGlobal(ConstantInitBuilder::StructBuilder &Builder,
- const llvm::Twine &Name, CodeGenModule &CGM) {
+ const llvm::Twine &Name, CodeGenModule &CGM) {
std::string SectionName;
if (CGM.getTriple().isOSBinFormatMachO())
SectionName = "__DATA, __objc_const";
@@ -1876,8 +1825,8 @@ finishAndCreateGlobal(ConstantInitBuilder::StructBuilder &Builder,
/* *** CGObjCMac Public Interface *** */
-CGObjCMac::CGObjCMac(CodeGen::CodeGenModule &cgm) : CGObjCCommonMac(cgm),
- ObjCTypes(cgm) {
+CGObjCMac::CGObjCMac(CodeGen::CodeGenModule &cgm)
+ : CGObjCCommonMac(cgm), ObjCTypes(cgm) {
ObjCABI = 1;
EmitImageInfo();
}
@@ -1896,24 +1845,22 @@ llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, Selector Sel) {
Address CGObjCMac::GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) {
return EmitSelectorAddr(Sel);
}
-llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, const ObjCMethodDecl
- *Method) {
+llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF,
+ const ObjCMethodDecl *Method) {
return EmitSelector(CGF, Method->getSelector());
}
llvm::Constant *CGObjCMac::GetEHType(QualType T) {
- if (T->isObjCIdType() ||
- T->isObjCQualifiedIdType()) {
+ if (T->isObjCIdType() || T->isObjCQualifiedIdType()) {
return CGM.GetAddrOfRTTIDescriptor(
- CGM.getContext().getObjCIdRedefinitionType(), /*ForEH=*/true);
+ CGM.getContext().getObjCIdRedefinitionType(), /*ForEH=*/true);
}
- if (T->isObjCClassType() ||
- T->isObjCQualifiedClassType()) {
+ if (T->isObjCClassType() || T->isObjCQualifiedClassType()) {
return CGM.GetAddrOfRTTIDescriptor(
- CGM.getContext().getObjCClassRedefinitionType(), /*ForEH=*/true);
+ CGM.getContext().getObjCClassRedefinitionType(), /*ForEH=*/true);
}
if (T->isObjCObjectPointerType())
- return CGM.GetAddrOfRTTIDescriptor(T, /*ForEH=*/true);
+ return CGM.GetAddrOfRTTIDescriptor(T, /*ForEH=*/true);
llvm_unreachable("asking for catch type for ObjC type in fragile runtime");
}
@@ -1940,8 +1887,8 @@ llvm::Constant *CGObjCMac::GetEHType(QualType T) {
ConstantAddress
CGObjCCommonMac::GenerateConstantString(const StringLiteral *SL) {
return (!CGM.getLangOpts().NoConstantCFStrings
- ? CGM.GetAddrOfConstantCFString(SL)
- : GenerateConstantNSString(SL));
+ ? CGM.GetAddrOfConstantCFString(SL)
+ : GenerateConstantNSString(SL));
}
static llvm::StringMapEntry<llvm::GlobalVariable *> &
@@ -1957,9 +1904,8 @@ llvm::Constant *CGObjCMac::getNSConstantStringClassRef() {
return cast<llvm::Constant>(V);
auto &StringClass = CGM.getLangOpts().ObjCConstantStringClass;
- std::string str =
- StringClass.empty() ? "_NSConstantStringClassReference"
- : "_" + StringClass + "ClassReference";
+ std::string str = StringClass.empty() ? "_NSConstantStringClassReference"
+ : "_" + StringClass + "ClassReference";
llvm::Type *PTy = llvm::ArrayType::get(CGM.IntTy, 0);
auto GV = CGM.CreateRuntimeVariable(PTy, str);
@@ -1972,9 +1918,8 @@ llvm::Constant *CGObjCNonFragileABIMac::getNSConstantStringClassRef() {
return cast<llvm::Constant>(V);
auto &StringClass = CGM.getLangOpts().ObjCConstantStringClass;
- std::string str =
- StringClass.empty() ? "OBJC_CLASS_$_NSConstantString"
- : "OBJC_CLASS_$_" + StringClass;
+ std::string str = StringClass.empty() ? "OBJC_CLASS_$_NSConstantString"
+ : "OBJC_CLASS_$_" + StringClass;
llvm::Constant *GV = GetClassGlobal(str, NotForDefinition);
ConstantStringClassRef = GV;
return GV;
@@ -1984,11 +1929,11 @@ ConstantAddress
CGObjCCommonMac::GenerateConstantNSString(const StringLiteral *Literal) {
unsigned StringLength = 0;
llvm::StringMapEntry<llvm::GlobalVariable *> &Entry =
- GetConstantStringEntry(NSConstantStringMap, Literal, StringLength);
+ GetConstantStringEntry(NSConstantStringMap, Literal, StringLength);
if (auto *C = Entry.second)
- return ConstantAddress(
- C, C->getValueType(), CharUnits::fromQuantity(C->getAlignment()));
+ return ConstantAddress(C, C->getValueType(),
+ CharUnits::fromQuantity(C->getAlignment()));
// If we don't already have it, get _NSConstantStringClassReference.
llvm::Constant *Class = getNSConstantStringClassRef();
@@ -2008,7 +1953,7 @@ CGObjCCommonMac::GenerateConstantNSString(const StringLiteral *Literal) {
// String pointer.
llvm::Constant *C =
- llvm::ConstantDataArray::getString(VMContext, Entry.first());
+ llvm::ConstantDataArray::getString(VMContext, Entry.first());
llvm::GlobalValue::LinkageTypes Linkage = llvm::GlobalValue::PrivateLinkage;
bool isConstant = !CGM.getLangOpts().WritableStrings;
@@ -2041,30 +1986,22 @@ CGObjCCommonMac::GenerateConstantNSString(const StringLiteral *Literal) {
return ConstantAddress(GV, GV->getValueType(), Alignment);
}
-enum {
- kCFTaggedObjectID_Integer = (1 << 1) + 1
-};
+enum { kCFTaggedObjectID_Integer = (1 << 1) + 1 };
/// Generates a message send where the super is the receiver. This is
/// a message send to self with special delivery semantics indicating
/// which class's method should be called.
-CodeGen::RValue
-CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- const ObjCInterfaceDecl *Class,
- bool isCategoryImpl,
- llvm::Value *Receiver,
- bool IsClassMessage,
- const CodeGen::CallArgList &CallArgs,
- const ObjCMethodDecl *Method) {
+CodeGen::RValue CGObjCMac::GenerateMessageSendSuper(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
+ Selector Sel, const ObjCInterfaceDecl *Class, bool isCategoryImpl,
+ llvm::Value *Receiver, bool IsClassMessage,
+ const CodeGen::CallArgList &CallArgs, const ObjCMethodDecl *Method) {
// Create and init a super structure; this is a (receiver, class)
// pair we will pass to objc_msgSendSuper.
RawAddress ObjCSuper = CGF.CreateTempAlloca(
ObjCTypes.SuperTy, CGF.getPointerAlign(), "objc_super");
llvm::Value *ReceiverAsObject =
- CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
+ CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
CGF.Builder.CreateStore(ReceiverAsObject,
CGF.Builder.CreateStructGEP(ObjCSuper, 0));
@@ -2102,7 +2039,7 @@ CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
// FIXME: We shouldn't need to do this cast, rectify the ASTContext and
// ObjCTypes types.
llvm::Type *ClassTy =
- CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
+ CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
Target = CGF.Builder.CreateBitCast(Target, ClassTy);
CGF.Builder.CreateStore(Target, CGF.Builder.CreateStructGEP(ObjCSuper, 1));
return EmitMessageSend(CGF, Return, ResultType, Sel, ObjCSuper.getPointer(),
@@ -2111,31 +2048,21 @@ CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
}
/// Generate code for a message send expression.
-CodeGen::RValue CGObjCMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- llvm::Value *Receiver,
- const CallArgList &CallArgs,
- const ObjCInterfaceDecl *Class,
- const ObjCMethodDecl *Method) {
+CodeGen::RValue CGObjCMac::GenerateMessageSend(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
+ Selector Sel, llvm::Value *Receiver, const CallArgList &CallArgs,
+ const ObjCInterfaceDecl *Class, const ObjCMethodDecl *Method) {
return EmitMessageSend(CGF, Return, ResultType, Sel, Receiver,
CGF.getContext().getObjCIdType(), false, CallArgs,
Method, Class, ObjCTypes);
}
-CodeGen::RValue
-CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- llvm::Value *Arg0,
- QualType Arg0Ty,
- bool IsSuper,
- const CallArgList &CallArgs,
- const ObjCMethodDecl *Method,
- const ObjCInterfaceDecl *ClassReceiver,
- const ObjCCommonTypesHelper &ObjCTypes) {
+CodeGen::RValue CGObjCCommonMac::EmitMessageSend(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
+ Selector Sel, llvm::Value *Arg0, QualType Arg0Ty, bool IsSuper,
+ const CallArgList &CallArgs, const ObjCMethodDecl *Method,
+ const ObjCInterfaceDecl *ClassReceiver,
+ const ObjCCommonTypesHelper &ObjCTypes) {
CodeGenTypes &Types = CGM.getTypes();
auto selTy = CGF.getContext().getObjCSelType();
llvm::Value *SelValue = llvm::UndefValue::get(Types.ConvertType(selTy));
@@ -2157,7 +2084,7 @@ CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
"Result type mismatch!");
bool ReceiverCanBeNull =
- canMessageReceiverBeNull(CGF, Method, IsSuper, ClassReceiver, Arg0);
+ canMessageReceiverBeNull(CGF, Method, IsSuper, ClassReceiver, Arg0);
bool RequiresNullCheck = false;
bool RequiresSelValue = true;
@@ -2170,22 +2097,23 @@ CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
// so just don't bother with setting the `_cmd` argument.
RequiresSelValue = false;
} else if (CGM.ReturnSlotInterferesWithArgs(MSI.CallInfo)) {
- if (ReceiverCanBeNull) RequiresNullCheck = true;
- Fn = (ObjCABI == 2) ? ObjCTypes.getSendStretFn2(IsSuper)
- : ObjCTypes.getSendStretFn(IsSuper);
+ if (ReceiverCanBeNull)
+ RequiresNullCheck = true;
+ Fn = (ObjCABI == 2) ? ObjCTypes.getSendStretFn2(IsSuper)
+ : ObjCTypes.getSendStretFn(IsSuper);
} else if (CGM.ReturnTypeUsesFPRet(ResultType)) {
Fn = (ObjCABI == 2) ? ObjCTypes.getSendFpretFn2(IsSuper)
- : ObjCTypes.getSendFpretFn(IsSuper);
+ : ObjCTypes.getSendFpretFn(IsSuper);
} else if (CGM.ReturnTypeUsesFP2Ret(ResultType)) {
Fn = (ObjCABI == 2) ? ObjCTypes.getSendFp2RetFn2(IsSuper)
- : ObjCTypes.getSendFp2retFn(IsSuper);
+ : ObjCTypes.getSendFp2retFn(IsSuper);
} else {
// arm64 uses objc_msgSend for stret methods and yet null receiver check
// must be made for it.
if (ReceiverCanBeNull && CGM.ReturnTypeUsesSRet(MSI.CallInfo))
RequiresNullCheck = true;
Fn = (ObjCABI == 2) ? ObjCTypes.getSendFn2(IsSuper)
- : ObjCTypes.getSendFn(IsSuper);
+ : ObjCTypes.getSendFn(IsSuper);
}
// Cast function to proper signature
@@ -2214,8 +2142,8 @@ CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
llvm::CallBase *CallSite;
CGCallee Callee = CGCallee::forDirect(BitcastFn);
- RValue rvalue = CGF.EmitCall(MSI.CallInfo, Callee, Return, ActualArgs,
- &CallSite);
+ RValue rvalue =
+ CGF.EmitCall(MSI.CallInfo, Callee, Return, ActualArgs, &CallSite);
// Mark the call as noreturn if the method is marked noreturn and the
// receiver cannot be null.
@@ -2240,13 +2168,19 @@ static Qualifiers::GC GetGCAttrTypeForType(ASTContext &Ctx, QualType FQT,
if (auto ownership = FQT.getObjCLifetime()) {
// Ownership does not apply recursively to C pointer types.
- if (pointee) return Qualifiers::GCNone;
+ if (pointee)
+ return Qualifiers::GCNone;
switch (ownership) {
- case Qualifiers::OCL_Weak: return Qualifiers::Weak;
- case Qualifiers::OCL_Strong: return Qualifiers::Strong;
- case Qualifiers::OCL_ExplicitNone: return Qualifiers::GCNone;
- case Qualifiers::OCL_Autoreleasing: llvm_unreachable("autoreleasing ivar?");
- case Qualifiers::OCL_None: llvm_unreachable("known nonzero");
+ case Qualifiers::OCL_Weak:
+ return Qualifiers::Weak;
+ case Qualifiers::OCL_Strong:
+ return Qualifiers::Strong;
+ case Qualifiers::OCL_ExplicitNone:
+ return Qualifiers::GCNone;
+ case Qualifiers::OCL_Autoreleasing:
+ llvm_unreachable("autoreleasing ivar?");
+ case Qualifiers::OCL_None:
+ llvm_unreachable("known nonzero");
}
llvm_unreachable("bad objc ownership");
}
@@ -2265,76 +2199,73 @@ static Qualifiers::GC GetGCAttrTypeForType(ASTContext &Ctx, QualType FQT,
}
namespace {
- struct IvarInfo {
- CharUnits Offset;
- uint64_t SizeInWords;
- IvarInfo(CharUnits offset, uint64_t sizeInWords)
+struct IvarInfo {
+ CharUnits Offset;
+ uint64_t SizeInWords;
+ IvarInfo(CharUnits offset, uint64_t sizeInWords)
: Offset(offset), SizeInWords(sizeInWords) {}
- // Allow sorting based on byte pos.
- bool operator<(const IvarInfo &other) const {
- return Offset < other.Offset;
- }
- };
+ // Allow sorting based on byte pos.
+ bool operator<(const IvarInfo &other) const { return Offset < other.Offset; }
+};
- /// A helper class for building GC layout strings.
- class IvarLayoutBuilder {
- CodeGenModule &CGM;
+/// A helper class for building GC layout strings.
+class IvarLayoutBuilder {
+ CodeGenModule &CGM;
- /// The start of the layout. Offsets will be relative to this value,
- /// and entries less than this value will be silently discarded.
- CharUnits InstanceBegin;
+ /// The start of the layout. Offsets will be relative to this value,
+ /// and entries less than this value will be silently discarded.
+ CharUnits InstanceBegin;
- /// The end of the layout. Offsets will never exceed this value.
- CharUnits InstanceEnd;
+ /// The end of the layout. Offsets will never exceed this value.
+ CharUnits InstanceEnd;
- /// Whether we're generating the strong layout or the weak layout.
- bool ForStrongLayout;
+ /// Whether we're generating the strong layout or the weak layout.
+ bool ForStrongLayout;
- /// Whether the offsets in IvarsInfo might be out-of-order.
- bool IsDisordered = false;
+ /// Whether the offsets in IvarsInfo might be out-of-order.
+ bool IsDisordered = false;
- llvm::SmallVector<IvarInfo, 8> IvarsInfo;
+ llvm::SmallVector<IvarInfo, 8> IvarsInfo;
- public:
- IvarLayoutBuilder(CodeGenModule &CGM, CharUnits instanceBegin,
- CharUnits instanceEnd, bool forStrongLayout)
+public:
+ IvarLayoutBuilder(CodeGenModule &CGM, CharUnits instanceBegin,
+ CharUnits instanceEnd, bool forStrongLayout)
: CGM(CGM), InstanceBegin(instanceBegin), InstanceEnd(instanceEnd),
- ForStrongLayout(forStrongLayout) {
- }
+ ForStrongLayout(forStrongLayout) {}
- void visitRecord(const RecordType *RT, CharUnits offset);
+ void visitRecord(const RecordType *RT, CharUnits offset);
- template <class Iterator, class GetOffsetFn>
- void visitAggregate(Iterator begin, Iterator end,
- CharUnits aggrOffset,
- const GetOffsetFn &getOffset);
+ template <class Iterator, class GetOffsetFn>
+ void visitAggregate(Iterator begin, Iterator end, CharUnits aggrOffset,
+ const GetOffsetFn &getOffset);
- void visitField(const FieldDecl *field, CharUnits offset);
+ void visitField(const FieldDecl *field, CharUnits offset);
- /// Add the layout of a block implementation.
- void visitBlock(const CGBlockInfo &blockInfo);
+ /// Add the layout of a block implementation.
+ void visitBlock(const CGBlockInfo &blockInfo);
- /// Is there any information for an interesting bitmap?
- bool hasBitmapData() const { return !IvarsInfo.empty(); }
+ /// Is there any information for an interesting bitmap?
+ bool hasBitmapData() const { return !IvarsInfo.empty(); }
- llvm::Constant *buildBitmap(CGObjCCommonMac &CGObjC,
- llvm::SmallVectorImpl<unsigned char> &buffer);
+ llvm::Constant *buildBitmap(CGObjCCommonMac &CGObjC,
+ llvm::SmallVectorImpl<unsigned char> &buffer);
- static void dump(ArrayRef<unsigned char> buffer) {
- const unsigned char *s = buffer.data();
- for (unsigned i = 0, e = buffer.size(); i < e; i++)
- if (!(s[i] & 0xf0))
- printf("0x0%x%s", s[i], s[i] != 0 ? ", " : "");
- else
- printf("0x%x%s", s[i], s[i] != 0 ? ", " : "");
- printf("\n");
- }
- };
+ static void dump(ArrayRef<unsigned char> buffer) {
+ const unsigned char *s = buffer.data();
+ for (unsigned i = 0, e = buffer.size(); i < e; i++)
+ if (!(s[i] & 0xf0))
+ printf("0x0%x%s", s[i], s[i] != 0 ? ", " : "");
+ else
+ printf("0x%x%s", s[i], s[i] != 0 ? ", " : "");
+ printf("\n");
+ }
+};
} // end anonymous namespace
-llvm::Constant *CGObjCCommonMac::BuildGCBlockLayout(CodeGenModule &CGM,
- const CGBlockInfo &blockInfo) {
+llvm::Constant *
+CGObjCCommonMac::BuildGCBlockLayout(CodeGenModule &CGM,
+ const CGBlockInfo &blockInfo) {
llvm::Constant *nullPtr = llvm::Constant::getNullValue(CGM.Int8PtrTy);
if (CGM.getLangOpts().getGC() == LangOptions::NonGC)
@@ -2378,7 +2309,8 @@ void IvarLayoutBuilder::visitBlock(const CGBlockInfo &blockInfo) {
const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable);
// Ignore constant captures.
- if (capture.isConstant()) continue;
+ if (capture.isConstant())
+ continue;
CharUnits fieldOffset = capture.getOffset();
@@ -2413,8 +2345,8 @@ void IvarLayoutBuilder::visitBlock(const CGBlockInfo &blockInfo) {
/// getBlockCaptureLifetime - This routine returns life time of the captured
/// block variable for the purpose of block layout meta-data generation. FQT is
/// the type of the variable captured in the block.
-Qualifiers::ObjCLifetime CGObjCCommonMac::getBlockCaptureLifetime(QualType FQT,
- bool ByrefLayout) {
+Qualifiers::ObjCLifetime
+CGObjCCommonMac::getBlockCaptureLifetime(QualType FQT, bool ByrefLayout) {
// If it has an ownership qualifier, we're done.
if (auto lifetime = FQT.getObjCLifetime())
return lifetime;
@@ -2436,26 +2368,25 @@ void CGObjCCommonMac::UpdateRunSkipBlockVars(bool IsByref,
CharUnits FieldSize) {
// __block variables are passed by their descriptor address.
if (IsByref)
- RunSkipBlockVars.push_back(RUN_SKIP(BLOCK_LAYOUT_BYREF, FieldOffset,
- FieldSize));
+ RunSkipBlockVars.push_back(
+ RUN_SKIP(BLOCK_LAYOUT_BYREF, FieldOffset, FieldSize));
else if (LifeTime == Qualifiers::OCL_Strong)
- RunSkipBlockVars.push_back(RUN_SKIP(BLOCK_LAYOUT_STRONG, FieldOffset,
- FieldSize));
+ RunSkipBlockVars.push_back(
+ RUN_SKIP(BLOCK_LAYOUT_STRONG, FieldOffset, FieldSize));
else if (LifeTime == Qualifiers::OCL_Weak)
- RunSkipBlockVars.push_back(RUN_SKIP(BLOCK_LAYOUT_WEAK, FieldOffset,
- FieldSize));
+ RunSkipBlockVars.push_back(
+ RUN_SKIP(BLOCK_LAYOUT_WEAK, FieldOffset, FieldSize));
else if (LifeTime == Qualifiers::OCL_ExplicitNone)
- RunSkipBlockVars.push_back(RUN_SKIP(BLOCK_LAYOUT_UNRETAINED, FieldOffset,
- FieldSize));
+ RunSkipBlockVars.push_back(
+ RUN_SKIP(BLOCK_LAYOUT_UNRETAINED, FieldOffset, FieldSize));
else
- RunSkipBlockVars.push_back(RUN_SKIP(BLOCK_LAYOUT_NON_OBJECT_BYTES,
- FieldOffset,
- FieldSize));
+ RunSkipBlockVars.push_back(
+ RUN_SKIP(BLOCK_LAYOUT_NON_OBJECT_BYTES, FieldOffset, FieldSize));
}
void CGObjCCommonMac::BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
const RecordDecl *RD,
- ArrayRef<const FieldDecl*> RecFields,
+ ArrayRef<const FieldDecl *> RecFields,
CharUnits BytePos, bool &HasUnion,
bool ByrefLayout) {
bool IsUnion = (RD && RD->isUnion());
@@ -2475,7 +2406,7 @@ void CGObjCCommonMac::BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
// although this dependency is hidden.
const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD);
CharUnits FieldOffset =
- CGM.getContext().toCharUnitsFromBits(RL.getFieldOffset(i));
+ CGM.getContext().toCharUnitsFromBits(RL.getFieldOffset(i));
// Skip over unnamed or bitfields
if (!Field->getIdentifier() || Field->isBitField()) {
@@ -2513,13 +2444,14 @@ void CGObjCCommonMac::BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
// Replicate layout information for each array element. Note that
// one element is already done.
uint64_t ElIx = 1;
- for (int FirstIndex = RunSkipBlockVars.size() - 1 ;ElIx < ElCount; ElIx++) {
+ for (int FirstIndex = RunSkipBlockVars.size() - 1; ElIx < ElCount;
+ ElIx++) {
CharUnits Size = CGM.getContext().getTypeSizeInChars(RT);
- for (int i = OldIndex+1; i <= FirstIndex; ++i)
+ for (int i = OldIndex + 1; i <= FirstIndex; ++i)
RunSkipBlockVars.push_back(
- RUN_SKIP(RunSkipBlockVars[i].opcode,
- RunSkipBlockVars[i].block_var_bytepos + Size*ElIx,
- RunSkipBlockVars[i].block_var_size));
+ RUN_SKIP(RunSkipBlockVars[i].opcode,
+ RunSkipBlockVars[i].block_var_bytepos + Size * ElIx,
+ RunSkipBlockVars[i].block_var_size));
}
continue;
}
@@ -2533,10 +2465,8 @@ void CGObjCCommonMac::BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
MaxFieldOffset = FieldOffset;
}
} else {
- UpdateRunSkipBlockVars(false,
- getBlockCaptureLifetime(FQT, ByrefLayout),
- BytePos + FieldOffset,
- FieldSize);
+ UpdateRunSkipBlockVars(false, getBlockCaptureLifetime(FQT, ByrefLayout),
+ BytePos + FieldOffset, FieldSize);
}
}
@@ -2545,32 +2475,32 @@ void CGObjCCommonMac::BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
// Last field was a bitfield. Must update the info.
uint64_t BitFieldSize = LastFieldBitfieldOrUnnamed->getBitWidthValue();
unsigned UnsSize = (BitFieldSize / ByteSizeInBits) +
- ((BitFieldSize % ByteSizeInBits) != 0);
+ ((BitFieldSize % ByteSizeInBits) != 0);
CharUnits Size = CharUnits::fromQuantity(UnsSize);
Size += LastBitfieldOrUnnamedOffset;
- UpdateRunSkipBlockVars(false,
- getBlockCaptureLifetime(LastFieldBitfieldOrUnnamed->getType(),
- ByrefLayout),
- BytePos + LastBitfieldOrUnnamedOffset,
- Size);
+ UpdateRunSkipBlockVars(
+ false,
+ getBlockCaptureLifetime(LastFieldBitfieldOrUnnamed->getType(),
+ ByrefLayout),
+ BytePos + LastBitfieldOrUnnamedOffset, Size);
} else {
- assert(!LastFieldBitfieldOrUnnamed->getIdentifier() &&"Expected unnamed");
+ assert(!LastFieldBitfieldOrUnnamed->getIdentifier() &&
+ "Expected unnamed");
// Last field was unnamed. Must update skip info.
- CharUnits FieldSize
- = CGM.getContext().getTypeSizeInChars(LastFieldBitfieldOrUnnamed->getType());
- UpdateRunSkipBlockVars(false,
- getBlockCaptureLifetime(LastFieldBitfieldOrUnnamed->getType(),
- ByrefLayout),
- BytePos + LastBitfieldOrUnnamedOffset,
- FieldSize);
+ CharUnits FieldSize = CGM.getContext().getTypeSizeInChars(
+ LastFieldBitfieldOrUnnamed->getType());
+ UpdateRunSkipBlockVars(
+ false,
+ getBlockCaptureLifetime(LastFieldBitfieldOrUnnamed->getType(),
+ ByrefLayout),
+ BytePos + LastBitfieldOrUnnamedOffset, FieldSize);
}
}
if (MaxField)
- UpdateRunSkipBlockVars(false,
- getBlockCaptureLifetime(MaxField->getType(), ByrefLayout),
- BytePos + MaxFieldOffset,
- MaxUnionSize);
+ UpdateRunSkipBlockVars(
+ false, getBlockCaptureLifetime(MaxField->getType(), ByrefLayout),
+ BytePos + MaxFieldOffset, MaxUnionSize);
}
void CGObjCCommonMac::BuildRCBlockVarRecordLayout(const RecordType *RT,
@@ -2578,105 +2508,104 @@ void CGObjCCommonMac::BuildRCBlockVarRecordLayout(const RecordType *RT,
bool &HasUnion,
bool ByrefLayout) {
const RecordDecl *RD = RT->getDecl();
- SmallVector<const FieldDecl*, 16> Fields(RD->fields());
+ SmallVector<const FieldDecl *, 16> Fields(RD->fields());
llvm::Type *Ty = CGM.getTypes().ConvertType(QualType(RT, 0));
const llvm::StructLayout *RecLayout =
- CGM.getDataLayout().getStructLayout(cast<llvm::StructType>(Ty));
+ CGM.getDataLayout().getStructLayout(cast<llvm::StructType>(Ty));
BuildRCRecordLayout(RecLayout, RD, Fields, BytePos, HasUnion, ByrefLayout);
}
/// InlineLayoutInstruction - This routine produce an inline instruction for the
/// block variable layout if it can. If not, it returns 0. Rules are as follow:
-/// If ((uintptr_t) layout) < (1 << 12), the layout is inline. In the 64bit world,
-/// an inline layout of value 0x0000000000000xyz is interpreted as follows:
-/// x captured object pointers of BLOCK_LAYOUT_STRONG. Followed by
-/// y captured object of BLOCK_LAYOUT_BYREF. Followed by
-/// z captured object of BLOCK_LAYOUT_WEAK. If any of the above is missing, zero
-/// replaces it. For example, 0x00000x00 means x BLOCK_LAYOUT_STRONG and no
-/// BLOCK_LAYOUT_BYREF and no BLOCK_LAYOUT_WEAK objects are captured.
+/// If ((uintptr_t) layout) < (1 << 12), the layout is inline. In the 64bit
+/// world, an inline layout of value 0x0000000000000xyz is interpreted as
+/// follows: x captured object pointers of BLOCK_LAYOUT_STRONG. Followed by y
+/// captured object of BLOCK_LAYOUT_BYREF. Followed by z captured object of
+/// BLOCK_LAYOUT_WEAK. If any of the above is missing, zero replaces it. For
+/// example, 0x00000x00 means x BLOCK_LAYOUT_STRONG and no BLOCK_LAYOUT_BYREF
+/// and no BLOCK_LAYOUT_WEAK objects are captured.
uint64_t CGObjCCommonMac::InlineLayoutInstruction(
- SmallVectorImpl<unsigned char> &Layout) {
+ SmallVectorImpl<unsigned char> &Layout) {
uint64_t Result = 0;
if (Layout.size() <= 3) {
unsigned size = Layout.size();
- unsigned strong_word_count = 0, byref_word_count=0, weak_word_count=0;
+ unsigned strong_word_count = 0, byref_word_count = 0, weak_word_count = 0;
unsigned char inst;
- enum BLOCK_LAYOUT_OPCODE opcode ;
+ enum BLOCK_LAYOUT_OPCODE opcode;
switch (size) {
- case 3:
- inst = Layout[0];
- opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
- if (opcode == BLOCK_LAYOUT_STRONG)
- strong_word_count = (inst & 0xF)+1;
- else
- return 0;
+ case 3:
+ inst = Layout[0];
+ opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
+ if (opcode == BLOCK_LAYOUT_STRONG)
+ strong_word_count = (inst & 0xF) + 1;
+ else
+ return 0;
+ inst = Layout[1];
+ opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
+ if (opcode == BLOCK_LAYOUT_BYREF)
+ byref_word_count = (inst & 0xF) + 1;
+ else
+ return 0;
+ inst = Layout[2];
+ opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
+ if (opcode == BLOCK_LAYOUT_WEAK)
+ weak_word_count = (inst & 0xF) + 1;
+ else
+ return 0;
+ break;
+
+ case 2:
+ inst = Layout[0];
+ opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
+ if (opcode == BLOCK_LAYOUT_STRONG) {
+ strong_word_count = (inst & 0xF) + 1;
inst = Layout[1];
- opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
+ opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
if (opcode == BLOCK_LAYOUT_BYREF)
- byref_word_count = (inst & 0xF)+1;
+ byref_word_count = (inst & 0xF) + 1;
+ else if (opcode == BLOCK_LAYOUT_WEAK)
+ weak_word_count = (inst & 0xF) + 1;
else
return 0;
- inst = Layout[2];
- opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
+ } else if (opcode == BLOCK_LAYOUT_BYREF) {
+ byref_word_count = (inst & 0xF) + 1;
+ inst = Layout[1];
+ opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
if (opcode == BLOCK_LAYOUT_WEAK)
- weak_word_count = (inst & 0xF)+1;
- else
- return 0;
- break;
-
- case 2:
- inst = Layout[0];
- opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
- if (opcode == BLOCK_LAYOUT_STRONG) {
- strong_word_count = (inst & 0xF)+1;
- inst = Layout[1];
- opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
- if (opcode == BLOCK_LAYOUT_BYREF)
- byref_word_count = (inst & 0xF)+1;
- else if (opcode == BLOCK_LAYOUT_WEAK)
- weak_word_count = (inst & 0xF)+1;
- else
- return 0;
- }
- else if (opcode == BLOCK_LAYOUT_BYREF) {
- byref_word_count = (inst & 0xF)+1;
- inst = Layout[1];
- opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
- if (opcode == BLOCK_LAYOUT_WEAK)
- weak_word_count = (inst & 0xF)+1;
- else
- return 0;
- }
- else
- return 0;
- break;
-
- case 1:
- inst = Layout[0];
- opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
- if (opcode == BLOCK_LAYOUT_STRONG)
- strong_word_count = (inst & 0xF)+1;
- else if (opcode == BLOCK_LAYOUT_BYREF)
- byref_word_count = (inst & 0xF)+1;
- else if (opcode == BLOCK_LAYOUT_WEAK)
- weak_word_count = (inst & 0xF)+1;
+ weak_word_count = (inst & 0xF) + 1;
else
return 0;
- break;
+ } else
+ return 0;
+ break;
- default:
+ case 1:
+ inst = Layout[0];
+ opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
+ if (opcode == BLOCK_LAYOUT_STRONG)
+ strong_word_count = (inst & 0xF) + 1;
+ else if (opcode == BLOCK_LAYOUT_BYREF)
+ byref_word_count = (inst & 0xF) + 1;
+ else if (opcode == BLOCK_LAYOUT_WEAK)
+ weak_word_count = (inst & 0xF) + 1;
+ else
return 0;
+ break;
+
+ default:
+ return 0;
}
// Cannot inline when any of the word counts is 15. Because this is one less
// than the actual work count (so 15 means 16 actual word counts),
// and we can only display 0 thru 15 word counts.
- if (strong_word_count == 16 || byref_word_count == 16 || weak_word_count == 16)
+ if (strong_word_count == 16 || byref_word_count == 16 ||
+ weak_word_count == 16)
return 0;
- unsigned count =
- (strong_word_count != 0) + (byref_word_count != 0) + (weak_word_count != 0);
+ unsigned count = (strong_word_count != 0) + (byref_word_count != 0) +
+ (weak_word_count != 0);
if (size == count) {
if (strong_word_count)
@@ -2698,7 +2627,7 @@ llvm::Constant *CGObjCCommonMac::getBitmapBlockLayout(bool ComputeByrefLayout) {
return nullPtr;
unsigned WordSizeInBits = CGM.getTarget().getPointerWidth(LangAS::Default);
unsigned ByteSizeInBits = CGM.getTarget().getCharWidth();
- unsigned WordSizeInBytes = WordSizeInBits/ByteSizeInBits;
+ unsigned WordSizeInBytes = WordSizeInBits / ByteSizeInBits;
// Sort on byte position; captures might not be allocated in order,
// and unions can do funny things.
@@ -2710,21 +2639,20 @@ llvm::Constant *CGObjCCommonMac::getBitmapBlockLayout(bool ComputeByrefLayout) {
enum BLOCK_LAYOUT_OPCODE opcode = RunSkipBlockVars[i].opcode;
CharUnits start_byte_pos = RunSkipBlockVars[i].block_var_bytepos;
CharUnits end_byte_pos = start_byte_pos;
- unsigned j = i+1;
+ unsigned j = i + 1;
while (j < size) {
if (opcode == RunSkipBlockVars[j].opcode) {
end_byte_pos = RunSkipBlockVars[j++].block_var_bytepos;
i++;
- }
- else
+ } else
break;
}
CharUnits size_in_bytes =
- end_byte_pos - start_byte_pos + RunSkipBlockVars[j-1].block_var_size;
+ end_byte_pos - start_byte_pos + RunSkipBlockVars[j - 1].block_var_size;
if (j < size) {
- CharUnits gap =
- RunSkipBlockVars[j].block_var_bytepos -
- RunSkipBlockVars[j-1].block_var_bytepos - RunSkipBlockVars[j-1].block_var_size;
+ CharUnits gap = RunSkipBlockVars[j].block_var_bytepos -
+ RunSkipBlockVars[j - 1].block_var_bytepos -
+ RunSkipBlockVars[j - 1].block_var_size;
size_in_bytes += gap;
}
CharUnits residue_in_bytes = CharUnits::Zero();
@@ -2745,20 +2673,21 @@ llvm::Constant *CGObjCCommonMac::getBitmapBlockLayout(bool ComputeByrefLayout) {
if (size_in_words > 0) {
// Note that value in imm. is one less that the actual
// value. So, we subtract 1 away!
- unsigned char inst = (opcode << 4) | (size_in_words-1);
+ unsigned char inst = (opcode << 4) | (size_in_words - 1);
Layout.push_back(inst);
}
if (residue_in_bytes > CharUnits::Zero()) {
- unsigned char inst =
- (BLOCK_LAYOUT_NON_OBJECT_BYTES << 4) | (residue_in_bytes.getQuantity()-1);
+ unsigned char inst = (BLOCK_LAYOUT_NON_OBJECT_BYTES << 4) |
+ (residue_in_bytes.getQuantity() - 1);
Layout.push_back(inst);
}
}
while (!Layout.empty()) {
unsigned char inst = Layout.back();
- enum BLOCK_LAYOUT_OPCODE opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
- if (opcode == BLOCK_LAYOUT_NON_OBJECT_BYTES || opcode == BLOCK_LAYOUT_NON_OBJECT_WORDS)
+ enum BLOCK_LAYOUT_OPCODE opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
+ if (opcode == BLOCK_LAYOUT_NON_OBJECT_BYTES ||
+ opcode == BLOCK_LAYOUT_NON_OBJECT_WORDS)
Layout.pop_back();
else
break;
@@ -2774,11 +2703,11 @@ llvm::Constant *CGObjCCommonMac::getBitmapBlockLayout(bool ComputeByrefLayout) {
printf("\n Inline block variable layout: ");
printf("0x0%" PRIx64 "", Result);
if (auto numStrong = (Result & 0xF00) >> 8)
- printf(", BL_STRONG:%d", (int) numStrong);
+ printf(", BL_STRONG:%d", (int)numStrong);
if (auto numByref = (Result & 0x0F0) >> 4)
- printf(", BL_BYREF:%d", (int) numByref);
+ printf(", BL_BYREF:%d", (int)numByref);
if (auto numWeak = (Result & 0x00F) >> 0)
- printf(", BL_WEAK:%d", (int) numWeak);
+ printf(", BL_WEAK:%d", (int)numWeak);
printf(", BL_OPERATOR:0\n");
}
return llvm::ConstantInt::get(CGM.IntPtrTy, Result);
@@ -2797,36 +2726,36 @@ llvm::Constant *CGObjCCommonMac::getBitmapBlockLayout(bool ComputeByrefLayout) {
printf("\n Block variable layout: ");
for (unsigned i = 0, e = BitMap.size(); i != e; i++) {
unsigned char inst = BitMap[i];
- enum BLOCK_LAYOUT_OPCODE opcode = (enum BLOCK_LAYOUT_OPCODE) (inst >> 4);
+ enum BLOCK_LAYOUT_OPCODE opcode = (enum BLOCK_LAYOUT_OPCODE)(inst >> 4);
unsigned delta = 1;
switch (opcode) {
- case BLOCK_LAYOUT_OPERATOR:
- printf("BL_OPERATOR:");
- delta = 0;
- break;
- case BLOCK_LAYOUT_NON_OBJECT_BYTES:
- printf("BL_NON_OBJECT_BYTES:");
- break;
- case BLOCK_LAYOUT_NON_OBJECT_WORDS:
- printf("BL_NON_OBJECT_WORD:");
- break;
- case BLOCK_LAYOUT_STRONG:
- printf("BL_STRONG:");
- break;
- case BLOCK_LAYOUT_BYREF:
- printf("BL_BYREF:");
- break;
- case BLOCK_LAYOUT_WEAK:
- printf("BL_WEAK:");
- break;
- case BLOCK_LAYOUT_UNRETAINED:
- printf("BL_UNRETAINED:");
- break;
+ case BLOCK_LAYOUT_OPERATOR:
+ printf("BL_OPERATOR:");
+ delta = 0;
+ break;
+ case BLOCK_LAYOUT_NON_OBJECT_BYTES:
+ printf("BL_NON_OBJECT_BYTES:");
+ break;
+ case BLOCK_LAYOUT_NON_OBJECT_WORDS:
+ printf("BL_NON_OBJECT_WORD:");
+ break;
+ case BLOCK_LAYOUT_STRONG:
+ printf("BL_STRONG:");
+ break;
+ case BLOCK_LAYOUT_BYREF:
+ printf("BL_BYREF:");
+ break;
+ case BLOCK_LAYOUT_WEAK:
+ printf("BL_WEAK:");
+ break;
+ case BLOCK_LAYOUT_UNRETAINED:
+ printf("BL_UNRETAINED:");
+ break;
}
// Actual value of word count is one more that what is in the imm.
// field of the instruction
printf("%d", (inst & 0xf) + delta);
- if (i < e-1)
+ if (i < e - 1)
printf(", ");
else
printf("\n");
@@ -2884,13 +2813,13 @@ void CGObjCCommonMac::fillRunSkipBlockVars(CodeGenModule &CGM,
unsigned WordSizeInBits = CGM.getTarget().getPointerWidth(LangAS::Default);
unsigned ByteSizeInBits = CGM.getTarget().getCharWidth();
- unsigned WordSizeInBytes = WordSizeInBits/ByteSizeInBits;
+ unsigned WordSizeInBytes = WordSizeInBits / ByteSizeInBits;
const BlockDecl *blockDecl = blockInfo.getBlockDecl();
// Calculate the basic layout of the block structure.
const llvm::StructLayout *layout =
- CGM.getDataLayout().getStructLayout(blockInfo.StructureType);
+ CGM.getDataLayout().getStructLayout(blockInfo.StructureType);
// Ignore the optional 'this' capture: C++ objects are not assumed
// to be GC'ed.
@@ -2906,10 +2835,11 @@ void CGObjCCommonMac::fillRunSkipBlockVars(CodeGenModule &CGM,
const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable);
// Ignore constant captures.
- if (capture.isConstant()) continue;
+ if (capture.isConstant())
+ continue;
CharUnits fieldOffset =
- CharUnits::fromQuantity(layout->getElementOffset(capture.getIndex()));
+ CharUnits::fromQuantity(layout->getElementOffset(capture.getIndex()));
assert(!type->isArrayType() && "array variable should not be caught");
if (!CI.isByRef())
@@ -2948,7 +2878,8 @@ llvm::Constant *CGObjCCommonMac::BuildByrefLayout(CodeGen::CodeGenModule &CGM,
RunSkipBlockVars.clear();
bool hasUnion = false;
if (const RecordType *record = T->getAs<RecordType>()) {
- BuildRCBlockVarRecordLayout(record, fieldOffset, hasUnion, true /*ByrefLayout */);
+ BuildRCBlockVarRecordLayout(record, fieldOffset, hasUnion,
+ true /*ByrefLayout */);
llvm::Constant *Result = getBitmapBlockLayout(true);
if (isa<llvm::ConstantInt>(Result))
Result = llvm::ConstantExpr::getIntToPtr(Result, CGM.Int8PtrTy);
@@ -2986,10 +2917,10 @@ llvm::Constant *CGObjCCommonMac::GetProtocolRef(const ObjCProtocolDecl *PD) {
return GetOrEmitProtocolRef(PD);
}
-llvm::Value *CGObjCCommonMac::EmitClassRefViaRuntime(
- CodeGenFunction &CGF,
- const ObjCInterfaceDecl *ID,
- ObjCCommonTypesHelper &ObjCTypes) {
+llvm::Value *
+CGObjCCommonMac::EmitClassRefViaRuntime(CodeGenFunction &CGF,
+ const ObjCInterfaceDecl *ID,
+ ObjCCommonTypesHelper &ObjCTypes) {
llvm::FunctionCallee lookUpClassFn = ObjCTypes.getLookUpClassFn();
llvm::Value *className = CGF.CGM
@@ -2997,10 +2928,8 @@ llvm::Value *CGObjCCommonMac::EmitClassRefViaRuntime(
ID->getObjCRuntimeNameAsString()))
.getPointer();
ASTContext &ctx = CGF.CGM.getContext();
- className =
- CGF.Builder.CreateBitCast(className,
- CGF.ConvertType(
- ctx.getPointerType(ctx.CharTy.withConst())));
+ className = CGF.Builder.CreateBitCast(
+ className, CGF.ConvertType(ctx.getPointerType(ctx.CharTy.withConst())));
llvm::CallInst *call = CGF.Builder.CreateCall(lookUpClassFn, className);
call->setDoesNotThrow();
return call;
@@ -3042,20 +2971,19 @@ llvm::Constant *CGObjCMac::GetOrEmitProtocol(const ObjCProtocolDecl *PD) {
values.add(GetClassName(PD->getObjCRuntimeNameAsString()));
values.add(EmitProtocolList("OBJC_PROTOCOL_REFS_" + PD->getName(),
PD->protocol_begin(), PD->protocol_end()));
- values.add(methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::RequiredInstanceMethods));
- values.add(methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::RequiredClassMethods));
+ values.add(methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::RequiredInstanceMethods));
+ values.add(methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::RequiredClassMethods));
if (Entry) {
// Already created, update the initializer.
assert(Entry->hasPrivateLinkage());
values.finishAndSetAsInitializer(Entry);
} else {
- Entry = values.finishAndCreateGlobal("OBJC_PROTOCOL_" + PD->getName(),
- CGM.getPointerAlign(),
- /*constant*/ false,
- llvm::GlobalValue::PrivateLinkage);
+ Entry = values.finishAndCreateGlobal(
+ "OBJC_PROTOCOL_" + PD->getName(), CGM.getPointerAlign(),
+ /*constant*/ false, llvm::GlobalValue::PrivateLinkage);
Entry->setSection("__OBJC,__protocol,regular,no_dead_strip");
Protocols[PD->getIdentifier()] = Entry;
@@ -3096,36 +3024,30 @@ llvm::Constant *CGObjCMac::GetOrEmitProtocolRef(const ObjCProtocolDecl *PD) {
llvm::Constant *
CGObjCMac::EmitProtocolExtension(const ObjCProtocolDecl *PD,
const ProtocolMethodLists &methodLists) {
- auto optInstanceMethods =
- methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::OptionalInstanceMethods);
- auto optClassMethods =
- methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::OptionalClassMethods);
-
- auto extendedMethodTypes =
- EmitProtocolMethodTypes("OBJC_PROTOCOL_METHOD_TYPES_" + PD->getName(),
- methodLists.emitExtendedTypesArray(this),
- ObjCTypes);
-
- auto instanceProperties =
- EmitPropertyList("OBJC_$_PROP_PROTO_LIST_" + PD->getName(), nullptr, PD,
- ObjCTypes, false);
+ auto optInstanceMethods = methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::OptionalInstanceMethods);
+ auto optClassMethods = methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::OptionalClassMethods);
+
+ auto extendedMethodTypes = EmitProtocolMethodTypes(
+ "OBJC_PROTOCOL_METHOD_TYPES_" + PD->getName(),
+ methodLists.emitExtendedTypesArray(this), ObjCTypes);
+
+ auto instanceProperties = EmitPropertyList(
+ "OBJC_$_PROP_PROTO_LIST_" + PD->getName(), nullptr, PD, ObjCTypes, false);
auto classProperties =
- EmitPropertyList("OBJC_$_CLASS_PROP_PROTO_LIST_" + PD->getName(), nullptr,
- PD, ObjCTypes, true);
+ EmitPropertyList("OBJC_$_CLASS_PROP_PROTO_LIST_" + PD->getName(), nullptr,
+ PD, ObjCTypes, true);
// Return null if no extension bits are used.
- if (optInstanceMethods->isNullValue() &&
- optClassMethods->isNullValue() &&
- extendedMethodTypes->isNullValue() &&
- instanceProperties->isNullValue() &&
+ if (optInstanceMethods->isNullValue() && optClassMethods->isNullValue() &&
+ extendedMethodTypes->isNullValue() && instanceProperties->isNullValue() &&
classProperties->isNullValue()) {
return llvm::Constant::getNullValue(ObjCTypes.ProtocolExtensionPtrTy);
}
uint64_t size =
- CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ProtocolExtensionTy);
+ CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ProtocolExtensionTy);
ConstantInitBuilder builder(CGM);
auto values = builder.beginStruct(ObjCTypes.ProtocolExtensionTy);
@@ -3187,11 +3109,10 @@ CGObjCMac::EmitProtocolList(Twine name,
return GV;
}
-static void
-PushProtocolProperties(llvm::SmallPtrSet<const IdentifierInfo*,16> &PropertySet,
- SmallVectorImpl<const ObjCPropertyDecl *> &Properties,
- const ObjCProtocolDecl *Proto,
- bool IsClassProperty) {
+static void PushProtocolProperties(
+ llvm::SmallPtrSet<const IdentifierInfo *, 16> &PropertySet,
+ SmallVectorImpl<const ObjCPropertyDecl *> &Properties,
+ const ObjCProtocolDecl *Proto, bool IsClassProperty) {
for (const auto *PD : Proto->properties()) {
if (IsClassProperty != PD->isClassProperty())
continue;
@@ -3216,11 +3137,9 @@ PushProtocolProperties(llvm::SmallPtrSet<const IdentifierInfo*,16> &PropertySet,
struct _objc_property[prop_count];
};
*/
-llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name,
- const Decl *Container,
- const ObjCContainerDecl *OCD,
- const ObjCCommonTypesHelper &ObjCTypes,
- bool IsClassProperty) {
+llvm::Constant *CGObjCCommonMac::EmitPropertyList(
+ Twine Name, const Decl *Container, const ObjCContainerDecl *OCD,
+ const ObjCCommonTypesHelper &ObjCTypes, bool IsClassProperty) {
if (IsClassProperty) {
// Make this entry NULL for OS X with deployment target < 10.11, for iOS
// with deployment target < 9.0.
@@ -3231,7 +3150,7 @@ llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name,
}
SmallVector<const ObjCPropertyDecl *, 16> Properties;
- llvm::SmallPtrSet<const IdentifierInfo*, 16> PropertySet;
+ llvm::SmallPtrSet<const IdentifierInfo *, 16> PropertySet;
if (const ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(OCD))
for (const ObjCCategoryDecl *ClassExt : OID->known_extensions())
@@ -3259,8 +3178,7 @@ llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name,
if (const ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(OCD)) {
for (const auto *P : OID->all_referenced_protocols())
PushProtocolProperties(PropertySet, Properties, P, IsClassProperty);
- }
- else if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(OCD)) {
+ } else if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(OCD)) {
for (const auto *P : CD->protocols())
PushProtocolProperties(PropertySet, Properties, P, IsClassProperty);
}
@@ -3270,7 +3188,7 @@ llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name,
return llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy);
unsigned propertySize =
- CGM.getDataLayout().getTypeAllocSize(ObjCTypes.PropertyTy);
+ CGM.getDataLayout().getTypeAllocSize(ObjCTypes.PropertyTy);
ConstantInitBuilder builder(CGM);
auto values = builder.beginStruct();
@@ -3295,16 +3213,15 @@ llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name,
return GV;
}
-llvm::Constant *
-CGObjCCommonMac::EmitProtocolMethodTypes(Twine Name,
- ArrayRef<llvm::Constant*> MethodTypes,
- const ObjCCommonTypesHelper &ObjCTypes) {
+llvm::Constant *CGObjCCommonMac::EmitProtocolMethodTypes(
+ Twine Name, ArrayRef<llvm::Constant *> MethodTypes,
+ const ObjCCommonTypesHelper &ObjCTypes) {
// Return null for empty list.
if (MethodTypes.empty())
return llvm::Constant::getNullValue(ObjCTypes.Int8PtrPtrTy);
- llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.Int8PtrTy,
- MethodTypes.size());
+ llvm::ArrayType *AT =
+ llvm::ArrayType::get(ObjCTypes.Int8PtrTy, MethodTypes.size());
llvm::Constant *Init = llvm::ConstantArray::get(AT, MethodTypes);
StringRef Section;
@@ -3337,20 +3254,16 @@ void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) {
// @implementation so everyone else can live life under a clear blue sky.
const ObjCInterfaceDecl *Interface = OCD->getClassInterface();
const ObjCCategoryDecl *Category =
- Interface->FindCategoryDeclaration(OCD->getIdentifier());
+ Interface->FindCategoryDeclaration(OCD->getIdentifier());
SmallString<256> ExtName;
- llvm::raw_svector_ostream(ExtName) << Interface->getName() << '_'
- << OCD->getName();
+ llvm::raw_svector_ostream(ExtName)
+ << Interface->getName() << '_' << OCD->getName();
ConstantInitBuilder Builder(CGM);
auto Values = Builder.beginStruct(ObjCTypes.CategoryTy);
- enum {
- InstanceMethods,
- ClassMethods,
- NumMethodLists
- };
+ enum { InstanceMethods, ClassMethods, NumMethodLists };
SmallVector<const ObjCMethodDecl *, 16> Methods[NumMethodLists];
for (const auto *MD : OCD->methods()) {
if (!MD->isDirectMethod())
@@ -3366,9 +3279,9 @@ void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) {
Values.add(emitMethodList(ExtName, MethodListType::CategoryClassMethods,
Methods[ClassMethods]));
if (Category) {
- Values.add(
- EmitProtocolList("OBJC_CATEGORY_PROTOCOLS_" + ExtName.str(),
- Category->protocol_begin(), Category->protocol_end()));
+ Values.add(EmitProtocolList("OBJC_CATEGORY_PROTOCOLS_" + ExtName.str(),
+ Category->protocol_begin(),
+ Category->protocol_end()));
} else {
Values.addNullPointer(ObjCTypes.ProtocolListPtrTy);
}
@@ -3376,19 +3289,18 @@ void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) {
// If there is no category @interface then there can be no properties.
if (Category) {
- Values.add(EmitPropertyList("_OBJC_$_PROP_LIST_" + ExtName.str(),
- OCD, Category, ObjCTypes, false));
- Values.add(EmitPropertyList("_OBJC_$_CLASS_PROP_LIST_" + ExtName.str(),
- OCD, Category, ObjCTypes, true));
+ Values.add(EmitPropertyList("_OBJC_$_PROP_LIST_" + ExtName.str(), OCD,
+ Category, ObjCTypes, false));
+ Values.add(EmitPropertyList("_OBJC_$_CLASS_PROP_LIST_" + ExtName.str(), OCD,
+ Category, ObjCTypes, true));
} else {
Values.addNullPointer(ObjCTypes.PropertyListPtrTy);
Values.addNullPointer(ObjCTypes.PropertyListPtrTy);
}
- llvm::GlobalVariable *GV =
- CreateMetadataVar("OBJC_CATEGORY_" + ExtName.str(), Values,
- "__OBJC,__category,regular,no_dead_strip",
- CGM.getPointerAlign(), true);
+ llvm::GlobalVariable *GV = CreateMetadataVar(
+ "OBJC_CATEGORY_" + ExtName.str(), Values,
+ "__OBJC,__category,regular,no_dead_strip", CGM.getPointerAlign(), true);
DefinedCategories.push_back(GV);
DefinedCategoryNames.insert(llvm::CachedHashString(ExtName));
// method definition entries must be clear for next implementation.
@@ -3397,53 +3309,53 @@ void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) {
enum FragileClassFlags {
/// Apparently: is not a meta-class.
- FragileABI_Class_Factory = 0x00001,
+ FragileABI_Class_Factory = 0x00001,
/// Is a meta-class.
- FragileABI_Class_Meta = 0x00002,
+ FragileABI_Class_Meta = 0x00002,
/// Has a non-trivial constructor or destructor.
- FragileABI_Class_HasCXXStructors = 0x02000,
+ FragileABI_Class_HasCXXStructors = 0x02000,
/// Has hidden visibility.
- FragileABI_Class_Hidden = 0x20000,
+ FragileABI_Class_Hidden = 0x20000,
/// Class implementation was compiled under ARC.
- FragileABI_Class_CompiledByARC = 0x04000000,
+ FragileABI_Class_CompiledByARC = 0x04000000,
/// Class implementation was compiled under MRC and has MRC weak ivars.
/// Exclusive with CompiledByARC.
- FragileABI_Class_HasMRCWeakIvars = 0x08000000,
+ FragileABI_Class_HasMRCWeakIvars = 0x08000000,
};
enum NonFragileClassFlags {
/// Is a meta-class.
- NonFragileABI_Class_Meta = 0x00001,
+ NonFragileABI_Class_Meta = 0x00001,
/// Is a root class.
- NonFragileABI_Class_Root = 0x00002,
+ NonFragileABI_Class_Root = 0x00002,
/// Has a non-trivial constructor or destructor.
- NonFragileABI_Class_HasCXXStructors = 0x00004,
+ NonFragileABI_Class_HasCXXStructors = 0x00004,
/// Has hidden visibility.
- NonFragileABI_Class_Hidden = 0x00010,
+ NonFragileABI_Class_Hidden = 0x00010,
/// Has the exception attribute.
- NonFragileABI_Class_Exception = 0x00020,
+ NonFragileABI_Class_Exception = 0x00020,
/// (Obsolete) ARC-specific: this class has a .release_ivars method
- NonFragileABI_Class_HasIvarReleaser = 0x00040,
+ NonFragileABI_Class_HasIvarReleaser = 0x00040,
/// Class implementation was compiled under ARC.
- NonFragileABI_Class_CompiledByARC = 0x00080,
+ NonFragileABI_Class_CompiledByARC = 0x00080,
/// Class has non-trivial destructors, but zero-initialization is okay.
NonFragileABI_Class_HasCXXDestructorOnly = 0x00100,
/// Class implementation was compiled under MRC and has MRC weak ivars.
/// Exclusive with CompiledByARC.
- NonFragileABI_Class_HasMRCWeakIvars = 0x00200,
+ NonFragileABI_Class_HasMRCWeakIvars = 0x00200,
};
static bool hasWeakMember(QualType type) {
@@ -3466,11 +3378,12 @@ static bool hasWeakMember(QualType type) {
/// __weak ivars.
static bool hasMRCWeakIvars(CodeGenModule &CGM,
const ObjCImplementationDecl *ID) {
- if (!CGM.getLangOpts().ObjCWeak) return false;
+ if (!CGM.getLangOpts().ObjCWeak)
+ return false;
assert(CGM.getLangOpts().getGC() == LangOptions::NonGC);
for (const ObjCIvarDecl *ivar =
- ID->getClassInterface()->all_declared_ivar_begin();
+ ID->getClassInterface()->all_declared_ivar_begin();
ivar; ivar = ivar->getNextIvar()) {
if (hasWeakMember(ivar->getType()))
return true;
@@ -3506,7 +3419,7 @@ void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) {
std::string ClassName = ID->getNameAsString();
// FIXME: Gross
ObjCInterfaceDecl *Interface =
- const_cast<ObjCInterfaceDecl*>(ID->getClassInterface());
+ const_cast<ObjCInterfaceDecl *>(ID->getClassInterface());
llvm::Constant *Protocols =
EmitProtocolList("OBJC_CLASS_PROTOCOLS_" + ID->getName(),
Interface->all_referenced_protocol_begin(),
@@ -3523,17 +3436,13 @@ void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) {
Flags |= FragileABI_Class_HasMRCWeakIvars;
CharUnits Size =
- CGM.getContext().getASTObjCImplementationLayout(ID).getSize();
+ CGM.getContext().getASTObjCImplementationLayout(ID).getSize();
// FIXME: Set CXX-structors flag.
if (ID->getClassInterface()->getVisibility() == HiddenVisibility)
Flags |= FragileABI_Class_Hidden;
- enum {
- InstanceMethods,
- ClassMethods,
- NumMethodLists
- };
+ enum { InstanceMethods, ClassMethods, NumMethodLists };
SmallVector<const ObjCMethodDecl *, 16> Methods[NumMethodLists];
for (const auto *MD : ID->methods()) {
if (!MD->isDirectMethod())
@@ -3599,9 +3508,10 @@ void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) {
MethodDefinitions.clear();
}
-llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID,
- llvm::Constant *Protocols,
- ArrayRef<const ObjCMethodDecl*> Methods) {
+llvm::Constant *
+CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID,
+ llvm::Constant *Protocols,
+ ArrayRef<const ObjCMethodDecl *> Methods) {
unsigned Flags = FragileABI_Class_Meta;
unsigned Size = CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ClassTy);
@@ -3629,16 +3539,16 @@ llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID,
values.addInt(ObjCTypes.LongTy, Flags);
values.addInt(ObjCTypes.LongTy, Size);
values.add(EmitIvarList(ID, true));
- values.add(emitMethodList(ID->getName(), MethodListType::ClassMethods,
- Methods));
+ values.add(
+ emitMethodList(ID->getName(), MethodListType::ClassMethods, Methods));
// cache is always NULL.
values.addNullPointer(ObjCTypes.CachePtrTy);
values.add(Protocols);
// ivar_layout for metaclass is always NULL.
values.addNullPointer(ObjCTypes.Int8PtrTy);
// The class extension is used to store class properties for metaclasses.
- values.add(EmitClassExtension(ID, CharUnits::Zero(), false/*hasMRCWeak*/,
- /*isMetaclass*/true));
+ values.add(EmitClassExtension(ID, CharUnits::Zero(), false /*hasMRCWeak*/,
+ /*isMetaclass*/ true));
std::string Name("OBJC_METACLASS_");
Name += ID->getName();
@@ -3707,10 +3617,10 @@ llvm::Value *CGObjCMac::EmitSuperClassRef(const ObjCInterfaceDecl *ID) {
struct _objc_property_list *properties;
};
*/
-llvm::Constant *
-CGObjCMac::EmitClassExtension(const ObjCImplementationDecl *ID,
- CharUnits InstanceSize, bool hasMRCWeakIvars,
- bool isMetaclass) {
+llvm::Constant *CGObjCMac::EmitClassExtension(const ObjCImplementationDecl *ID,
+ CharUnits InstanceSize,
+ bool hasMRCWeakIvars,
+ bool isMetaclass) {
// Weak ivar layout.
llvm::Constant *layout;
if (isMetaclass) {
@@ -3722,10 +3632,10 @@ CGObjCMac::EmitClassExtension(const ObjCImplementationDecl *ID,
// Properties.
llvm::Constant *propertyList =
- EmitPropertyList((isMetaclass ? Twine("_OBJC_$_CLASS_PROP_LIST_")
- : Twine("_OBJC_$_PROP_LIST_"))
- + ID->getName(),
- ID, ID->getClassInterface(), ObjCTypes, isMetaclass);
+ EmitPropertyList((isMetaclass ? Twine("_OBJC_$_CLASS_PROP_LIST_")
+ : Twine("_OBJC_$_PROP_LIST_")) +
+ ID->getName(),
+ ID, ID->getClassInterface(), ObjCTypes, isMetaclass);
// Return null if no extension bits are used.
if (layout->isNullValue() && propertyList->isNullValue()) {
@@ -3733,7 +3643,7 @@ CGObjCMac::EmitClassExtension(const ObjCImplementationDecl *ID,
}
uint64_t size =
- CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ClassExtensionTy);
+ CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ClassExtensionTy);
ConstantInitBuilder builder(CGM);
auto values = builder.beginStruct(ObjCTypes.ClassExtensionTy);
@@ -3775,8 +3685,8 @@ llvm::Constant *CGObjCMac::EmitIvarList(const ObjCImplementationDecl *ID,
auto countSlot = ivarList.addPlaceholder();
auto ivars = ivarList.beginArray(ObjCTypes.IvarTy);
- for (const ObjCIvarDecl *IVD = OID->all_declared_ivar_begin();
- IVD; IVD = IVD->getNextIvar()) {
+ for (const ObjCIvarDecl *IVD = OID->all_declared_ivar_begin(); IVD;
+ IVD = IVD->getNextIvar()) {
// Ignore unnamed bit-fields.
if (!IVD->getDeclName())
continue;
@@ -3852,8 +3762,9 @@ void CGObjCMac::emitMethodConstant(ConstantArrayBuilder &builder,
/// int count;
/// struct objc_method_description list[count];
/// };
-llvm::Constant *CGObjCMac::emitMethodList(Twine name, MethodListType MLT,
- ArrayRef<const ObjCMethodDecl *> methods) {
+llvm::Constant *
+CGObjCMac::emitMethodList(Twine name, MethodListType MLT,
+ ArrayRef<const ObjCMethodDecl *> methods) {
StringRef prefix;
StringRef section;
bool forProtocol = false;
@@ -3902,9 +3813,9 @@ llvm::Constant *CGObjCMac::emitMethodList(Twine name, MethodListType MLT,
// Return null for empty list.
if (methods.empty())
- return llvm::Constant::getNullValue(forProtocol
- ? ObjCTypes.MethodDescriptionListPtrTy
- : ObjCTypes.MethodListPtrTy);
+ return llvm::Constant::getNullValue(
+ forProtocol ? ObjCTypes.MethodDescriptionListPtrTy
+ : ObjCTypes.MethodListPtrTy);
// For protocols, this is an objc_method_description_list, which has
// a slightly different structure.
@@ -3952,9 +3863,8 @@ llvm::Function *CGObjCCommonMac::GenerateMethod(const ObjCMethodDecl *OMD,
CodeGenTypes &Types = CGM.getTypes();
llvm::FunctionType *MethodTy =
Types.GetFunctionType(Types.arrangeObjCMethodDeclaration(OMD));
- Method =
- llvm::Function::Create(MethodTy, llvm::GlobalValue::InternalLinkage,
- Name, &CGM.getModule());
+ Method = llvm::Function::Create(
+ MethodTy, llvm::GlobalValue::InternalLinkage, Name, &CGM.getModule());
}
MethodDefinitions.insert(std::make_pair(OMD, Method));
@@ -3986,7 +3896,7 @@ CGObjCCommonMac::GenerateDirectMethod(const ObjCMethodDecl *OMD,
CodeGenTypes &Types = CGM.getTypes();
llvm::FunctionType *MethodTy =
- Types.GetFunctionType(Types.arrangeObjCMethodDeclaration(OMD));
+ Types.GetFunctionType(Types.arrangeObjCMethodDeclaration(OMD));
if (OldFn) {
Fn = llvm::Function::Create(MethodTy, llvm::GlobalValue::ExternalLinkage,
@@ -4096,11 +4006,10 @@ void CGObjCCommonMac::GenerateDirectMethodPrologue(
}
}
-llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(Twine Name,
- ConstantStructBuilder &Init,
- StringRef Section,
- CharUnits Align,
- bool AddToUsed) {
+llvm::GlobalVariable *
+CGObjCCommonMac::CreateMetadataVar(Twine Name, ConstantStructBuilder &Init,
+ StringRef Section, CharUnits Align,
+ bool AddToUsed) {
llvm::GlobalValue::LinkageTypes LT =
getLinkageTypeForObjCMetadata(CGM, Section);
llvm::GlobalVariable *GV =
@@ -4136,10 +4045,18 @@ CGObjCCommonMac::CreateCStringLiteral(StringRef Name, ObjCLabelType Type,
bool NullTerminate) {
StringRef Label;
switch (Type) {
- case ObjCLabelType::ClassName: Label = "OBJC_CLASS_NAME_"; break;
- case ObjCLabelType::MethodVarName: Label = "OBJC_METH_VAR_NAME_"; break;
- case ObjCLabelType::MethodVarType: Label = "OBJC_METH_VAR_TYPE_"; break;
- case ObjCLabelType::PropertyName: Label = "OBJC_PROP_NAME_ATTR_"; break;
+ case ObjCLabelType::ClassName:
+ Label = "OBJC_CLASS_NAME_";
+ break;
+ case ObjCLabelType::MethodVarName:
+ Label = "OBJC_METH_VAR_NAME_";
+ break;
+ case ObjCLabelType::MethodVarType:
+ Label = "OBJC_METH_VAR_TYPE_";
+ break;
+ case ObjCLabelType::PropertyName:
+ Label = "OBJC_PROP_NAME_ATTR_";
+ break;
}
bool NonFragile = ForceNonFragileABI || isNonFragileABI();
@@ -4166,10 +4083,9 @@ CGObjCCommonMac::CreateCStringLiteral(StringRef Name, ObjCLabelType Type,
llvm::Constant *Value =
llvm::ConstantDataArray::getString(VMContext, Name, NullTerminate);
- llvm::GlobalVariable *GV =
- new llvm::GlobalVariable(CGM.getModule(), Value->getType(),
- /*isConstant=*/true,
- llvm::GlobalValue::PrivateLinkage, Value, Label);
+ llvm::GlobalVariable *GV = new llvm::GlobalVariable(
+ CGM.getModule(), Value->getType(),
+ /*isConstant=*/true, llvm::GlobalValue::PrivateLinkage, Value, Label);
if (CGM.getTriple().isOSBinFormatMachO())
GV->setSection(Section);
GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
@@ -4228,85 +4144,84 @@ void CGObjCMac::EmitSynchronizedStmt(CodeGenFunction &CGF,
}
namespace {
- struct PerformFragileFinally final : EHScopeStack::Cleanup {
- const Stmt &S;
- Address SyncArgSlot;
- Address CallTryExitVar;
- Address ExceptionData;
- ObjCTypesHelper &ObjCTypes;
- PerformFragileFinally(const Stmt *S,
- Address SyncArgSlot,
- Address CallTryExitVar,
- Address ExceptionData,
- ObjCTypesHelper *ObjCTypes)
+struct PerformFragileFinally final : EHScopeStack::Cleanup {
+ const Stmt &S;
+ Address SyncArgSlot;
+ Address CallTryExitVar;
+ Address ExceptionData;
+ ObjCTypesHelper &ObjCTypes;
+ PerformFragileFinally(const Stmt *S, Address SyncArgSlot,
+ Address CallTryExitVar, Address ExceptionData,
+ ObjCTypesHelper *ObjCTypes)
: S(*S), SyncArgSlot(SyncArgSlot), CallTryExitVar(CallTryExitVar),
ExceptionData(ExceptionData), ObjCTypes(*ObjCTypes) {}
- void Emit(CodeGenFunction &CGF, Flags flags) override {
- // Check whether we need to call objc_exception_try_exit.
- // In optimized code, this branch will always be folded.
- llvm::BasicBlock *FinallyCallExit =
+ void Emit(CodeGenFunction &CGF, Flags flags) override {
+ // Check whether we need to call objc_exception_try_exit.
+ // In optimized code, this branch will always be folded.
+ llvm::BasicBlock *FinallyCallExit =
CGF.createBasicBlock("finally.call_exit");
- llvm::BasicBlock *FinallyNoCallExit =
+ llvm::BasicBlock *FinallyNoCallExit =
CGF.createBasicBlock("finally.no_call_exit");
- CGF.Builder.CreateCondBr(CGF.Builder.CreateLoad(CallTryExitVar),
- FinallyCallExit, FinallyNoCallExit);
+ CGF.Builder.CreateCondBr(CGF.Builder.CreateLoad(CallTryExitVar),
+ FinallyCallExit, FinallyNoCallExit);
- CGF.EmitBlock(FinallyCallExit);
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryExitFn(),
- ExceptionData.emitRawPointer(CGF));
+ CGF.EmitBlock(FinallyCallExit);
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryExitFn(),
+ ExceptionData.emitRawPointer(CGF));
- CGF.EmitBlock(FinallyNoCallExit);
+ CGF.EmitBlock(FinallyNoCallExit);
- if (isa<ObjCAtTryStmt>(S)) {
- if (const ObjCAtFinallyStmt* FinallyStmt =
+ if (isa<ObjCAtTryStmt>(S)) {
+ if (const ObjCAtFinallyStmt *FinallyStmt =
cast<ObjCAtTryStmt>(S).getFinallyStmt()) {
- // Don't try to do the @finally if this is an EH cleanup.
- if (flags.isForEHCleanup()) return;
+ // Don't try to do the @finally if this is an EH cleanup.
+ if (flags.isForEHCleanup())
+ return;
- // Save the current cleanup destination in case there's
- // control flow inside the finally statement.
- llvm::Value *CurCleanupDest =
+ // Save the current cleanup destination in case there's
+ // control flow inside the finally statement.
+ llvm::Value *CurCleanupDest =
CGF.Builder.CreateLoad(CGF.getNormalCleanupDestSlot());
- CGF.EmitStmt(FinallyStmt->getFinallyBody());
+ CGF.EmitStmt(FinallyStmt->getFinallyBody());
- if (CGF.HaveInsertPoint()) {
- CGF.Builder.CreateStore(CurCleanupDest,
- CGF.getNormalCleanupDestSlot());
- } else {
- // Currently, the end of the cleanup must always exist.
- CGF.EnsureInsertPoint();
- }
+ if (CGF.HaveInsertPoint()) {
+ CGF.Builder.CreateStore(CurCleanupDest,
+ CGF.getNormalCleanupDestSlot());
+ } else {
+ // Currently, the end of the cleanup must always exist.
+ CGF.EnsureInsertPoint();
}
- } else {
- // Emit objc_sync_exit(expr); as finally's sole statement for
- // @synchronized.
- llvm::Value *SyncArg = CGF.Builder.CreateLoad(SyncArgSlot);
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncExitFn(), SyncArg);
}
+ } else {
+ // Emit objc_sync_exit(expr); as finally's sole statement for
+ // @synchronized.
+ llvm::Value *SyncArg = CGF.Builder.CreateLoad(SyncArgSlot);
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncExitFn(), SyncArg);
}
- };
+ }
+};
- class FragileHazards {
- CodeGenFunction &CGF;
- SmallVector<llvm::Value*, 20> Locals;
- llvm::DenseSet<llvm::BasicBlock*> BlocksBeforeTry;
+class FragileHazards {
+ CodeGenFunction &CGF;
+ SmallVector<llvm::Value *, 20> Locals;
+ llvm::DenseSet<llvm::BasicBlock *> BlocksBeforeTry;
- llvm::InlineAsm *ReadHazard;
- llvm::InlineAsm *WriteHazard;
+ llvm::InlineAsm *ReadHazard;
+ llvm::InlineAsm *WriteHazard;
- llvm::FunctionType *GetAsmFnType();
+ llvm::FunctionType *GetAsmFnType();
- void collectLocals();
- void emitReadHazard(CGBuilderTy &Builder);
+ void collectLocals();
+ void emitReadHazard(CGBuilderTy &Builder);
- public:
- FragileHazards(CodeGenFunction &CGF);
+public:
+ FragileHazards(CodeGenFunction &CGF);
- void emitWriteHazard();
- void emitHazardsInNewBlocks();
- };
+ void emitWriteHazard();
+ void emitHazardsInNewBlocks();
+};
} // end anonymous namespace
/// Create the fragile-ABI read and write hazards based on the current
@@ -4317,11 +4232,12 @@ namespace {
FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
collectLocals();
- if (Locals.empty()) return;
+ if (Locals.empty())
+ return;
// Collect all the blocks in the function.
- for (llvm::Function::iterator
- I = CGF.CurFn->begin(), E = CGF.CurFn->end(); I != E; ++I)
+ for (llvm::Function::iterator I = CGF.CurFn->begin(), E = CGF.CurFn->end();
+ I != E; ++I)
BlocksBeforeTry.insert(&*I);
llvm::FunctionType *AsmFnTy = GetAsmFnType();
@@ -4334,7 +4250,8 @@ FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
{
std::string Constraint;
for (unsigned I = 0, E = Locals.size(); I != E; ++I) {
- if (I) Constraint += ',';
+ if (I)
+ Constraint += ',';
Constraint += "*m";
}
@@ -4348,7 +4265,8 @@ FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
{
std::string Constraint;
for (unsigned I = 0, E = Locals.size(); I != E; ++I) {
- if (I) Constraint += ',';
+ if (I)
+ Constraint += ',';
Constraint += "=*m";
}
@@ -4358,13 +4276,16 @@ FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
/// Emit a write hazard at the current location.
void FragileHazards::emitWriteHazard() {
- if (Locals.empty()) return;
+ if (Locals.empty())
+ return;
llvm::CallInst *Call = CGF.EmitNounwindRuntimeCall(WriteHazard, Locals);
for (auto Pair : llvm::enumerate(Locals))
- Call->addParamAttr(Pair.index(), llvm::Attribute::get(
- CGF.getLLVMContext(), llvm::Attribute::ElementType,
- cast<llvm::AllocaInst>(Pair.value())->getAllocatedType()));
+ Call->addParamAttr(
+ Pair.index(),
+ llvm::Attribute::get(
+ CGF.getLLVMContext(), llvm::Attribute::ElementType,
+ cast<llvm::AllocaInst>(Pair.value())->getAllocatedType()));
}
void FragileHazards::emitReadHazard(CGBuilderTy &Builder) {
@@ -4373,27 +4294,31 @@ void FragileHazards::emitReadHazard(CGBuilderTy &Builder) {
call->setDoesNotThrow();
call->setCallingConv(CGF.getRuntimeCC());
for (auto Pair : llvm::enumerate(Locals))
- call->addParamAttr(Pair.index(), llvm::Attribute::get(
- Builder.getContext(), llvm::Attribute::ElementType,
- cast<llvm::AllocaInst>(Pair.value())->getAllocatedType()));
+ call->addParamAttr(
+ Pair.index(),
+ llvm::Attribute::get(
+ Builder.getContext(), llvm::Attribute::ElementType,
+ cast<llvm::AllocaInst>(Pair.value())->getAllocatedType()));
}
/// Emit read hazards in all the protected blocks, i.e. all the blocks
/// which have been inserted since the beginning of the try.
void FragileHazards::emitHazardsInNewBlocks() {
- if (Locals.empty()) return;
+ if (Locals.empty())
+ return;
CGBuilderTy Builder(CGF, CGF.getLLVMContext());
// Iterate through all blocks, skipping those prior to the try.
- for (llvm::Function::iterator
- FI = CGF.CurFn->begin(), FE = CGF.CurFn->end(); FI != FE; ++FI) {
+ for (llvm::Function::iterator FI = CGF.CurFn->begin(), FE = CGF.CurFn->end();
+ FI != FE; ++FI) {
llvm::BasicBlock &BB = *FI;
- if (BlocksBeforeTry.count(&BB)) continue;
+ if (BlocksBeforeTry.count(&BB))
+ continue;
// Walk through all the calls in the block.
- for (llvm::BasicBlock::iterator
- BI = BB.begin(), BE = BB.end(); BI != BE; ++BI) {
+ for (llvm::BasicBlock::iterator BI = BB.begin(), BE = BB.end(); BI != BE;
+ ++BI) {
llvm::Instruction &I = *BI;
// Ignore instructions that aren't non-intrinsic calls.
@@ -4419,7 +4344,7 @@ void FragileHazards::emitHazardsInNewBlocks() {
}
}
-static void addIfPresent(llvm::DenseSet<llvm::Value*> &S, Address V) {
+static void addIfPresent(llvm::DenseSet<llvm::Value *> &S, Address V) {
if (V.isValid())
if (llvm::Value *Ptr = V.getBasePointer())
S.insert(Ptr);
@@ -4427,15 +4352,15 @@ static void addIfPresent(llvm::DenseSet<llvm::Value*> &S, Address V) {
void FragileHazards::collectLocals() {
// Compute a set of allocas to ignore.
- llvm::DenseSet<llvm::Value*> AllocasToIgnore;
+ llvm::DenseSet<llvm::Value *> AllocasToIgnore;
addIfPresent(AllocasToIgnore, CGF.ReturnValue);
addIfPresent(AllocasToIgnore, CGF.NormalCleanupDest);
// Collect all the allocas currently in the function. This is
// probably way too aggressive.
llvm::BasicBlock &Entry = CGF.CurFn->getEntryBlock();
- for (llvm::BasicBlock::iterator
- I = Entry.begin(), E = Entry.end(); I != E; ++I)
+ for (llvm::BasicBlock::iterator I = Entry.begin(), E = Entry.end(); I != E;
+ ++I)
if (isa<llvm::AllocaInst>(*I) && !AllocasToIgnore.count(&*I))
Locals.push_back(&*I);
}
@@ -4562,12 +4487,12 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// A destination for the fall-through edges of the catch handlers to
// jump to.
CodeGenFunction::JumpDest FinallyEnd =
- CGF.getJumpDestInCurrentScope("finally.end");
+ CGF.getJumpDestInCurrentScope("finally.end");
// A destination for the rethrow edge of the catch handlers to jump
// to.
CodeGenFunction::JumpDest FinallyRethrow =
- CGF.getJumpDestInCurrentScope("finally.rethrow");
+ CGF.getJumpDestInCurrentScope("finally.rethrow");
// For @synchronized, call objc_sync_enter(sync.expr). The
// evaluation of the expression must occur before we enter the
@@ -4577,7 +4502,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
Address SyncArgSlot = Address::invalid();
if (!isTry) {
llvm::Value *SyncArg =
- CGF.EmitScalarExpr(cast<ObjCAtSynchronizedStmt>(S).getSynchExpr());
+ CGF.EmitScalarExpr(cast<ObjCAtSynchronizedStmt>(S).getSynchExpr());
SyncArg = CGF.Builder.CreateBitCast(SyncArg, ObjCTypes.ObjectPtrTy);
CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncEnterFn(), SyncArg);
@@ -4588,9 +4513,8 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// Allocate memory for the setjmp buffer. This needs to be kept
// live throughout the try and catch blocks.
- Address ExceptionData = CGF.CreateTempAlloca(ObjCTypes.ExceptionDataTy,
- CGF.getPointerAlign(),
- "exceptiondata.ptr");
+ Address ExceptionData = CGF.CreateTempAlloca(
+ ObjCTypes.ExceptionDataTy, CGF.getPointerAlign(), "exceptiondata.ptr");
// Create the fragile hazards. Note that this will not capture any
// of the allocas required for exception processing, but will
@@ -4606,9 +4530,8 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// The setjmp-safety rule here is that we should always store to this
// variable in a place that dominates the branch through the cleanup
// without passing through any setjmps.
- Address CallTryExitVar = CGF.CreateTempAlloca(CGF.Builder.getInt1Ty(),
- CharUnits::One(),
- "_call_try_exit");
+ Address CallTryExitVar = CGF.CreateTempAlloca(
+ CGF.Builder.getInt1Ty(), CharUnits::One(), "_call_try_exit");
// A slot containing the exception to rethrow. Only needed when we
// have both a @catch and a @finally.
@@ -4616,10 +4539,8 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// Push a normal cleanup to leave the try scope.
CGF.EHStack.pushCleanup<PerformFragileFinally>(NormalAndEHCleanup, &S,
- SyncArgSlot,
- CallTryExitVar,
- ExceptionData,
- &ObjCTypes);
+ SyncArgSlot, CallTryExitVar,
+ ExceptionData, &ObjCTypes);
// Enter a try block:
// - Call objc_exception_try_enter to push ExceptionData on top of
@@ -4629,7 +4550,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// - Call setjmp on the exception data buffer.
llvm::Constant *Zero = llvm::ConstantInt::get(CGF.Builder.getInt32Ty(), 0);
- llvm::Value *GEPIndexes[] = { Zero, Zero, Zero };
+ llvm::Value *GEPIndexes[] = {Zero, Zero, Zero};
llvm::Value *SetJmpBuffer = CGF.Builder.CreateGEP(
ObjCTypes.ExceptionDataTy, ExceptionData.emitRawPointer(CGF), GEPIndexes,
"setjmp_buffer");
@@ -4642,7 +4563,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
llvm::BasicBlock *TryBlock = CGF.createBasicBlock("try");
llvm::BasicBlock *TryHandler = CGF.createBasicBlock("try.handler");
llvm::Value *DidCatch =
- CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
+ CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
CGF.Builder.CreateCondBr(DidCatch, TryHandler, TryBlock);
// Emit the protected block.
@@ -4666,7 +4587,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
CGF.EmitBranchThroughCleanup(FinallyRethrow);
- // Otherwise, we have to match against the caught exceptions.
+ // Otherwise, we have to match against the caught exceptions.
} else {
// Retrieve the exception object. We may emit multiple blocks but
// nothing can cross this so the value is already in SSA form.
@@ -4678,7 +4599,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// benefit of any @throws in the handlers.
CGF.ObjCEHValueStack.push_back(Caught);
- const ObjCAtTryStmt* AtTryStmt = cast<ObjCAtTryStmt>(&S);
+ const ObjCAtTryStmt *AtTryStmt = cast<ObjCAtTryStmt>(&S);
bool HasFinally = (AtTryStmt->getFinallyStmt() != nullptr);
@@ -4687,9 +4608,8 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
if (HasFinally) {
// Save the currently-propagating exception before
// objc_exception_try_enter clears the exception slot.
- PropagatingExnVar = CGF.CreateTempAlloca(Caught->getType(),
- CGF.getPointerAlign(),
- "propagating_exception");
+ PropagatingExnVar = CGF.CreateTempAlloca(
+ Caught->getType(), CGF.getPointerAlign(), "propagating_exception");
CGF.Builder.CreateStore(Caught, PropagatingExnVar);
// Enter a new exception try block (in case a @catch block
@@ -4697,13 +4617,12 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryEnterFn(),
ExceptionData.emitRawPointer(CGF));
- llvm::CallInst *SetJmpResult =
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getSetJmpFn(),
- SetJmpBuffer, "setjmp.result");
+ llvm::CallInst *SetJmpResult = CGF.EmitNounwindRuntimeCall(
+ ObjCTypes.getSetJmpFn(), SetJmpBuffer, "setjmp.result");
SetJmpResult->setCanReturnTwice();
llvm::Value *Threw =
- CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
+ CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
CatchBlock = CGF.createBasicBlock("catch");
CatchHandler = CGF.createBasicBlock("catch_for_catch");
@@ -4767,10 +4686,9 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// Check if the @catch block matches the exception object.
llvm::Value *Class = EmitClassRef(CGF, IDecl);
- llvm::Value *matchArgs[] = { Class, Caught };
- llvm::CallInst *Match =
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionMatchFn(),
- matchArgs, "match");
+ llvm::Value *matchArgs[] = {Class, Caught};
+ llvm::CallInst *Match = CGF.EmitNounwindRuntimeCall(
+ ObjCTypes.getExceptionMatchFn(), matchArgs, "match");
llvm::BasicBlock *MatchedBlock = CGF.createBasicBlock("match");
llvm::BasicBlock *NextCatchBlock = CGF.createBasicBlock("catch.next");
@@ -4789,9 +4707,8 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
// Initialize the catch variable.
- llvm::Value *Tmp =
- CGF.Builder.CreateBitCast(Caught,
- CGF.ConvertType(CatchParam->getType()));
+ llvm::Value *Tmp = CGF.Builder.CreateBitCast(
+ Caught, CGF.ConvertType(CatchParam->getType()));
EmitInitOfCatchParam(CGF, Tmp, CatchParam);
CGF.EmitStmt(CatchStmt->getCatchBody());
@@ -4821,7 +4738,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// In theory we might now need a write hazard, but actually it's
// unnecessary because there's no local-accessing code between
// the try's write hazard and here.
- //Hazards.emitWriteHazard();
+ // Hazards.emitWriteHazard();
// Extract the new exception and save it to the
// propagating-exception slot.
@@ -4856,7 +4773,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
if (PropagatingExnVar.isValid()) {
PropagatingExn = CGF.Builder.CreateLoad(PropagatingExnVar);
- // Otherwise, just look in the buffer for the exception to throw.
+ // Otherwise, just look in the buffer for the exception to throw.
} else {
llvm::CallInst *Caught = CGF.EmitNounwindRuntimeCall(
ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF));
@@ -4879,7 +4796,7 @@ void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
if (const Expr *ThrowExpr = S.getThrowExpr()) {
llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
ExceptionAsObject =
- CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
+ CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
} else {
assert((!CGF.ObjCEHValueStack.empty() && CGF.ObjCEHValueStack.back()) &&
"Unexpected rethrow outside @catch block.");
@@ -4887,7 +4804,7 @@ void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
}
CGF.EmitRuntimeCall(ObjCTypes.getExceptionThrowFn(), ExceptionAsObject)
- ->setDoesNotReturn();
+ ->setDoesNotReturn();
CGF.Builder.CreateUnreachable();
// Clear the insertion point to indicate we are in unreachable code.
@@ -4898,14 +4815,13 @@ void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
/// EmitObjCWeakRead - Code gen for loading value of a __weak
/// object: objc_read_weak (id *src)
///
-llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
- Address AddrWeakObj) {
- llvm::Type* DestTy = AddrWeakObj.getElementType();
+llvm::Value *CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
+ Address AddrWeakObj) {
+ llvm::Type *DestTy = AddrWeakObj.getElementType();
llvm::Value *AddrWeakObjVal = CGF.Builder.CreateBitCast(
AddrWeakObj.emitRawPointer(CGF), ObjCTypes.PtrObjectPtrTy);
- llvm::Value *read_weak =
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
- AddrWeakObjVal, "weakread");
+ llvm::Value *read_weak = CGF.EmitNounwindRuntimeCall(
+ ObjCTypes.getGcReadWeakFn(), AddrWeakObjVal, "weakread");
read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
return read_weak;
}
@@ -4915,7 +4831,7 @@ llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
///
void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst) {
- llvm::Type * SrcTy = src->getType();
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
@@ -4926,9 +4842,9 @@ void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
ObjCTypes.PtrObjectPtrTy);
- llvm::Value *args[] = { src, dstVal };
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
- args, "weakassign");
+ llvm::Value *args[] = {src, dstVal};
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(), args,
+ "weakassign");
}
/// EmitObjCGlobalAssign - Code gen for assigning to a __strong object.
@@ -4937,7 +4853,7 @@ void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst,
bool threadlocal) {
- llvm::Type * SrcTy = src->getType();
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
@@ -4950,11 +4866,11 @@ void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
ObjCTypes.PtrObjectPtrTy);
llvm::Value *args[] = {src, dstVal};
if (!threadlocal)
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
- args, "globalassign");
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(), args,
+ "globalassign");
else
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
- args, "threadlocalassign");
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(), args,
+ "threadlocalassign");
}
/// EmitObjCIvarAssign - Code gen for assigning to a __strong object.
@@ -4964,7 +4880,7 @@ void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst,
llvm::Value *ivarOffset) {
assert(ivarOffset && "EmitObjCIvarAssign - ivarOffset is NULL");
- llvm::Type * SrcTy = src->getType();
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
@@ -4984,7 +4900,7 @@ void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
///
void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst) {
- llvm::Type * SrcTy = src->getType();
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
@@ -4996,8 +4912,8 @@ void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
ObjCTypes.PtrObjectPtrTy);
llvm::Value *args[] = {src, dstVal};
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
- args, "strongassign");
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(), args,
+ "strongassign");
}
void CGObjCMac::EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
@@ -5016,7 +4932,7 @@ LValue CGObjCMac::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
const ObjCIvarDecl *Ivar,
unsigned CVRQualifiers) {
const ObjCInterfaceDecl *ID =
- ObjectTy->castAs<ObjCObjectType>()->getInterface();
+ ObjectTy->castAs<ObjCObjectType>()->getInterface();
return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
EmitIvarOffset(CGF, ID, Ivar));
}
@@ -5026,8 +4942,7 @@ llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
const ObjCIvarDecl *Ivar) {
uint64_t Offset = ComputeIvarBaseOffset(CGM, Interface, Ivar);
return llvm::ConstantInt::get(
- CGM.getTypes().ConvertType(CGM.getContext().LongTy),
- Offset);
+ CGM.getTypes().ConvertType(CGM.getContext().LongTy), Offset);
}
/* *** Private Interface *** */
@@ -5069,17 +4984,19 @@ std::string CGObjCCommonMac::GetSectionName(StringRef Section,
/// unsigned flags;
/// };
enum ImageInfoFlags {
- eImageInfo_FixAndContinue = (1 << 0), // This flag is no longer set by clang.
- eImageInfo_GarbageCollected = (1 << 1),
- eImageInfo_GCOnly = (1 << 2),
- eImageInfo_OptimizedByDyld = (1 << 3), // This flag is set by the dyld shared cache.
+ eImageInfo_FixAndContinue = (1 << 0), // This flag is no longer set by clang.
+ eImageInfo_GarbageCollected = (1 << 1),
+ eImageInfo_GCOnly = (1 << 2),
+ eImageInfo_OptimizedByDyld =
+ (1 << 3), // This flag is set by the dyld shared cache.
// A flag indicating that the module has no instances of a @synthesize of a
// superclass variable. This flag used to be consumed by the runtime to work
// around miscompile by gcc.
- eImageInfo_CorrectedSynthesize = (1 << 4), // This flag is no longer set by clang.
- eImageInfo_ImageIsSimulated = (1 << 5),
- eImageInfo_ClassProperties = (1 << 6)
+ eImageInfo_CorrectedSynthesize =
+ (1 << 4), // This flag is no longer set by clang.
+ eImageInfo_ImageIsSimulated = (1 << 5),
+ eImageInfo_ClassProperties = (1 << 6)
};
void CGObjCCommonMac::EmitImageInfo() {
@@ -5103,15 +5020,13 @@ void CGObjCCommonMac::EmitImageInfo() {
auto Int8Ty = llvm::Type::getInt8Ty(VMContext);
if (CGM.getLangOpts().getGC() == LangOptions::NonGC) {
// Non-GC overrides those files which specify GC.
- Mod.addModuleFlag(llvm::Module::Error,
- "Objective-C Garbage Collection",
- llvm::ConstantInt::get(Int8Ty,0));
+ Mod.addModuleFlag(llvm::Module::Error, "Objective-C Garbage Collection",
+ llvm::ConstantInt::get(Int8Ty, 0));
} else {
// Add the ObjC garbage collection value.
- Mod.addModuleFlag(llvm::Module::Error,
- "Objective-C Garbage Collection",
- llvm::ConstantInt::get(Int8Ty,
- (uint8_t)eImageInfo_GarbageCollected));
+ Mod.addModuleFlag(
+ llvm::Module::Error, "Objective-C Garbage Collection",
+ llvm::ConstantInt::get(Int8Ty, (uint8_t)eImageInfo_GarbageCollected));
if (CGM.getLangOpts().getGC() == LangOptions::GCOnly) {
// Add the ObjC GC Only value.
@@ -5121,8 +5036,8 @@ void CGObjCCommonMac::EmitImageInfo() {
// Require that GC be specified and set to eImageInfo_GarbageCollected.
llvm::Metadata *Ops[2] = {
llvm::MDString::get(VMContext, "Objective-C Garbage Collection"),
- llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
- Int8Ty, eImageInfo_GarbageCollected))};
+ llvm::ConstantAsMetadata::get(
+ llvm::ConstantInt::get(Int8Ty, eImageInfo_GarbageCollected))};
Mod.addModuleFlag(llvm::Module::Require, "Objective-C GC Only",
llvm::MDNode::get(VMContext, Ops));
}
@@ -5181,7 +5096,7 @@ llvm::Constant *CGObjCMac::EmitModuleSymbols() {
// The runtime expects exactly the list of defined classes followed
// by the list of defined categories, in a single array.
auto array = values.beginArray(ObjCTypes.Int8PtrTy);
- for (unsigned i=0; i<NumClasses; i++) {
+ for (unsigned i = 0; i < NumClasses; i++) {
const ObjCInterfaceDecl *ID = ImplementedClasses[i];
assert(ID);
if (ObjCImplementationDecl *IMP = ID->getImplementation())
@@ -5191,7 +5106,7 @@ llvm::Constant *CGObjCMac::EmitModuleSymbols() {
array.add(DefinedClasses[i]);
}
- for (unsigned i=0; i<NumCategories; i++)
+ for (unsigned i = 0; i < NumCategories; i++)
array.add(DefinedCategories[i]);
array.finishAndAddTo(values);
@@ -5255,10 +5170,10 @@ ConstantAddress CGObjCMac::EmitSelectorAddr(Selector Sel) {
}
llvm::Constant *CGObjCCommonMac::GetClassName(StringRef RuntimeName) {
- llvm::GlobalVariable *&Entry = ClassNames[RuntimeName];
- if (!Entry)
- Entry = CreateCStringLiteral(RuntimeName, ObjCLabelType::ClassName);
- return getConstantGEP(VMContext, Entry, 0, 0);
+ llvm::GlobalVariable *&Entry = ClassNames[RuntimeName];
+ if (!Entry)
+ Entry = CreateCStringLiteral(RuntimeName, ObjCLabelType::ClassName);
+ return getConstantGEP(VMContext, Entry, 0, 0);
}
llvm::Function *CGObjCCommonMac::GetMethodDefinition(const ObjCMethodDecl *MD) {
@@ -5267,13 +5182,13 @@ llvm::Function *CGObjCCommonMac::GetMethodDefinition(const ObjCMethodDecl *MD) {
/// GetIvarLayoutName - Returns a unique constant for the given
/// ivar layout bitmap.
-llvm::Constant *CGObjCCommonMac::GetIvarLayoutName(IdentifierInfo *Ident,
- const ObjCCommonTypesHelper &ObjCTypes) {
+llvm::Constant *
+CGObjCCommonMac::GetIvarLayoutName(IdentifierInfo *Ident,
+ const ObjCCommonTypesHelper &ObjCTypes) {
return llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy);
}
-void IvarLayoutBuilder::visitRecord(const RecordType *RT,
- CharUnits offset) {
+void IvarLayoutBuilder::visitRecord(const RecordType *RT, CharUnits offset) {
const RecordDecl *RD = RT->getDecl();
// If this is a union, remember that we had one, because it might mess
@@ -5284,11 +5199,12 @@ void IvarLayoutBuilder::visitRecord(const RecordType *RT,
const ASTRecordLayout *recLayout = nullptr;
visitAggregate(RD->field_begin(), RD->field_end(), offset,
[&](const FieldDecl *field) -> CharUnits {
- if (!recLayout)
- recLayout = &CGM.getContext().getASTRecordLayout(RD);
- auto offsetInBits = recLayout->getFieldOffset(field->getFieldIndex());
- return CGM.getContext().toCharUnitsFromBits(offsetInBits);
- });
+ if (!recLayout)
+ recLayout = &CGM.getContext().getASTRecordLayout(RD);
+ auto offsetInBits =
+ recLayout->getFieldOffset(field->getFieldIndex());
+ return CGM.getContext().toCharUnitsFromBits(offsetInBits);
+ });
}
template <class Iterator, class GetOffsetFn>
@@ -5331,7 +5247,8 @@ void IvarLayoutBuilder::visitField(const FieldDecl *field,
// If we ended up with a zero-sized array, we've done what we can do within
// the limits of this layout encoding.
- if (numElts == 0) return;
+ if (numElts == 0)
+ return;
// Recurse if the base element type is a record type.
if (auto recType = fieldType->getAs<RecordType>()) {
@@ -5361,10 +5278,10 @@ void IvarLayoutBuilder::visitField(const FieldDecl *field,
Qualifiers::GC GCAttr = GetGCAttrTypeForType(CGM.getContext(), fieldType);
// If it matches what we're looking for, add an entry.
- if ((ForStrongLayout && GCAttr == Qualifiers::Strong)
- || (!ForStrongLayout && GCAttr == Qualifiers::Weak)) {
- assert(CGM.getContext().getTypeSizeInChars(fieldType)
- == CGM.getPointerSize());
+ if ((ForStrongLayout && GCAttr == Qualifiers::Strong) ||
+ (!ForStrongLayout && GCAttr == Qualifiers::Weak)) {
+ assert(CGM.getContext().getTypeSizeInChars(fieldType) ==
+ CGM.getPointerSize());
IvarsInfo.push_back(IvarInfo(fieldOffset, numElts));
}
}
@@ -5372,8 +5289,9 @@ void IvarLayoutBuilder::visitField(const FieldDecl *field,
/// buildBitmap - This routine does the horsework of taking the offsets of
/// strong/weak references and creating a bitmap. The bitmap is also
/// returned in the given buffer, suitable for being passed to \c dump().
-llvm::Constant *IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC,
- llvm::SmallVectorImpl<unsigned char> &buffer) {
+llvm::Constant *
+IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC,
+ llvm::SmallVectorImpl<unsigned char> &buffer) {
// The bitmap is a series of skip/scan instructions, aligned to word
// boundaries. The skip is performed first.
const unsigned char MaxNibble = 0xF;
@@ -5454,7 +5372,8 @@ llvm::Constant *IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC,
// Ignore scan requests that don't start at an even multiple of the
// word size. We can't encode them.
- if ((beginOfScan % WordSize) != 0) continue;
+ if ((beginOfScan % WordSize) != 0)
+ continue;
// Ignore scan requests that start before the instance start.
// This assumes that scans never span that boundary. The boundary
@@ -5474,12 +5393,13 @@ llvm::Constant *IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC,
if (beginOfScanInWords > endOfLastScanInWords) {
skip(beginOfScanInWords - endOfLastScanInWords);
- // Otherwise, start scanning where the last left off.
+ // Otherwise, start scanning where the last left off.
} else {
beginOfScanInWords = endOfLastScanInWords;
// If that leaves us with nothing to scan, ignore this request.
- if (beginOfScanInWords >= endOfScanInWords) continue;
+ if (beginOfScanInWords >= endOfScanInWords)
+ continue;
}
// Scan to the end of the request.
@@ -5496,7 +5416,7 @@ llvm::Constant *IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC,
// or necessary for the ARC-style layout strings.
if (CGM.getLangOpts().getGC() != LangOptions::NonGC) {
unsigned lastOffsetInWords =
- (InstanceEnd - InstanceBegin + WordSize - CharUnits::One()) / WordSize;
+ (InstanceEnd - InstanceBegin + WordSize - CharUnits::One()) / WordSize;
if (lastOffsetInWords > endOfLastScanInWords) {
skip(lastOffsetInWords - endOfLastScanInWords);
}
@@ -5539,7 +5459,7 @@ CGObjCCommonMac::BuildIvarLayout(const ObjCImplementationDecl *OMD,
return llvm::Constant::getNullValue(PtrTy);
const ObjCInterfaceDecl *OI = OMD->getClassInterface();
- SmallVector<const ObjCIvarDecl*, 32> ivars;
+ SmallVector<const ObjCIvarDecl *, 32> ivars;
// GC layout strings include the complete object layout, possibly
// inaccurately in the non-fragile ABI; the runtime knows how to fix this
@@ -5553,22 +5473,21 @@ CGObjCCommonMac::BuildIvarLayout(const ObjCImplementationDecl *OMD,
// MRC weak layout strings follow the ARC style.
CharUnits baseOffset;
if (CGM.getLangOpts().getGC() == LangOptions::NonGC) {
- for (const ObjCIvarDecl *IVD = OI->all_declared_ivar_begin();
- IVD; IVD = IVD->getNextIvar())
+ for (const ObjCIvarDecl *IVD = OI->all_declared_ivar_begin(); IVD;
+ IVD = IVD->getNextIvar())
ivars.push_back(IVD);
if (isNonFragileABI()) {
baseOffset = beginOffset; // InstanceStart
} else if (!ivars.empty()) {
baseOffset =
- CharUnits::fromQuantity(ComputeIvarBaseOffset(CGM, OMD, ivars[0]));
+ CharUnits::fromQuantity(ComputeIvarBaseOffset(CGM, OMD, ivars[0]));
} else {
baseOffset = CharUnits::Zero();
}
baseOffset = baseOffset.alignTo(CGM.getPointerAlign());
- }
- else {
+ } else {
CGM.getContext().DeepCollectObjCIvars(OI, true, ivars);
baseOffset = CharUnits::Zero();
@@ -5581,8 +5500,9 @@ CGObjCCommonMac::BuildIvarLayout(const ObjCImplementationDecl *OMD,
builder.visitAggregate(ivars.begin(), ivars.end(), CharUnits::Zero(),
[&](const ObjCIvarDecl *ivar) -> CharUnits {
- return CharUnits::fromQuantity(ComputeIvarBaseOffset(CGM, OMD, ivar));
- });
+ return CharUnits::fromQuantity(
+ ComputeIvarBaseOffset(CGM, OMD, ivar));
+ });
if (!builder.hasBitmapData())
return llvm::Constant::getNullValue(PtrTy);
@@ -5590,7 +5510,7 @@ CGObjCCommonMac::BuildIvarLayout(const ObjCImplementationDecl *OMD,
llvm::SmallVector<unsigned char, 4> buffer;
llvm::Constant *C = builder.buildBitmap(*this, buffer);
- if (CGM.getLangOpts().ObjCGCBitmapPrint && !buffer.empty()) {
+ if (CGM.getLangOpts().ObjCGCBitmapPrint && !buffer.empty()) {
printf("\n%s ivar layout for class '%s': ",
ForStrongLayout ? "strong" : "weak",
OMD->getClassInterface()->getName().str().c_str());
@@ -5603,7 +5523,8 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarName(Selector Sel) {
llvm::GlobalVariable *&Entry = MethodVarNames[Sel];
// FIXME: Avoid std::string in "Sel.getAsString()"
if (!Entry)
- Entry = CreateCStringLiteral(Sel.getAsString(), ObjCLabelType::MethodVarName);
+ Entry =
+ CreateCStringLiteral(Sel.getAsString(), ObjCLabelType::MethodVarName);
return getConstantGEP(VMContext, Entry, 0, 0);
}
@@ -5625,7 +5546,7 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarType(const FieldDecl *Field) {
llvm::Constant *CGObjCCommonMac::GetMethodVarType(const ObjCMethodDecl *D,
bool Extended) {
std::string TypeStr =
- CGM.getContext().getObjCEncodingForMethodDecl(D, Extended);
+ CGM.getContext().getObjCEncodingForMethodDecl(D, Extended);
llvm::GlobalVariable *&Entry = MethodVarTypes[TypeStr];
if (!Entry)
@@ -5647,7 +5568,7 @@ llvm::Constant *
CGObjCCommonMac::GetPropertyTypeString(const ObjCPropertyDecl *PD,
const Decl *Container) {
std::string TypeStr =
- CGM.getContext().getObjCEncodingForPropertyDecl(PD, Container);
+ CGM.getContext().getObjCEncodingForPropertyDecl(PD, Container);
return GetPropertyName(&CGM.getContext().Idents.get(TypeStr));
}
@@ -5707,8 +5628,8 @@ CGObjCNonFragileABIMac::CGObjCNonFragileABIMac(CodeGen::CodeGenModule &cgm)
/* *** */
ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
- : VMContext(cgm.getLLVMContext()), CGM(cgm), ExternalProtocolPtrTy(nullptr)
-{
+ : VMContext(cgm.getLLVMContext()), CGM(cgm),
+ ExternalProtocolPtrTy(nullptr) {
CodeGen::CodeGenTypes &Types = CGM.getTypes();
ASTContext &Ctx = CGM.getContext();
unsigned ProgramAS = CGM.getDataLayout().getProgramAddressSpace();
@@ -5727,12 +5648,10 @@ ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
else
IvarOffsetVarTy = LongTy;
- ObjectPtrTy =
- cast<llvm::PointerType>(Types.ConvertType(Ctx.getObjCIdType()));
- PtrObjectPtrTy =
- llvm::PointerType::getUnqual(ObjectPtrTy);
+ ObjectPtrTy = cast<llvm::PointerType>(Types.ConvertType(Ctx.getObjCIdType()));
+ PtrObjectPtrTy = llvm::PointerType::getUnqual(ObjectPtrTy);
SelectorPtrTy =
- cast<llvm::PointerType>(Types.ConvertType(Ctx.getObjCSelType()));
+ cast<llvm::PointerType>(Types.ConvertType(Ctx.getObjCSelType()));
// I'm not sure I like this. The implicit coordination is a bit
// gross. We should solve this in a reasonable fashion because this
@@ -5793,7 +5712,7 @@ ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
}
ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
- : ObjCCommonTypesHelper(cgm) {
+ : ObjCCommonTypesHelper(cgm) {
// struct _objc_method_description {
// SEL name;
// char *types;
@@ -5811,7 +5730,7 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
// struct _objc_method_description_list *
MethodDescriptionListPtrTy =
- llvm::PointerType::getUnqual(MethodDescriptionListTy);
+ llvm::PointerType::getUnqual(MethodDescriptionListTy);
// Protocol description structures
@@ -5867,13 +5786,12 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
IntTy);
// struct _objc_ivar_list *
- IvarListTy =
- llvm::StructType::create(VMContext, "struct._objc_ivar_list");
+ IvarListTy = llvm::StructType::create(VMContext, "struct._objc_ivar_list");
IvarListPtrTy = llvm::PointerType::getUnqual(IvarListTy);
// struct _objc_method_list *
MethodListTy =
- llvm::StructType::create(VMContext, "struct._objc_method_list");
+ llvm::StructType::create(VMContext, "struct._objc_method_list");
MethodListPtrTy = llvm::PointerType::getUnqual(MethodListTy);
// struct _objc_class_extension *
@@ -5954,8 +5872,9 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
llvm::ArrayType::get(CGM.Int32Ty, SetJmpBufferSize), StackPtrTy);
}
-ObjCNonFragileABITypesHelper::ObjCNonFragileABITypesHelper(CodeGen::CodeGenModule &cgm)
- : ObjCCommonTypesHelper(cgm) {
+ObjCNonFragileABITypesHelper::ObjCNonFragileABITypesHelper(
+ CodeGen::CodeGenModule &cgm)
+ : ObjCCommonTypesHelper(cgm) {
// struct _method_list_t {
// uint32_t entsize; // sizeof(struct _objc_method)
// uint32_t method_count;
@@ -6122,7 +6041,6 @@ ObjCNonFragileABITypesHelper::ObjCNonFragileABITypesHelper(CodeGen::CodeGenModul
// SuperMessageRefPtrTy - LLVM for struct _super_message_ref_t*
SuperMessageRefPtrTy = llvm::PointerType::getUnqual(SuperMessageRefTy);
-
// struct objc_typeinfo {
// const void** vtable; // objc_ehtype_vtable + 2
// const char* name; // c++ typeinfo string
@@ -6148,14 +6066,12 @@ void CGObjCNonFragileABIMac::AddModuleClassList(
if (!NumClasses)
return;
- SmallVector<llvm::Constant*, 8> Symbols(NumClasses);
- for (unsigned i=0; i<NumClasses; i++)
+ SmallVector<llvm::Constant *, 8> Symbols(NumClasses);
+ for (unsigned i = 0; i < NumClasses; i++)
Symbols[i] = Container[i];
- llvm::Constant *Init =
- llvm::ConstantArray::get(llvm::ArrayType::get(ObjCTypes.Int8PtrTy,
- Symbols.size()),
- Symbols);
+ llvm::Constant *Init = llvm::ConstantArray::get(
+ llvm::ArrayType::get(ObjCTypes.Int8PtrTy, Symbols.size()), Symbols);
// Section name is obtained by calling GetSectionName, which returns
// sections in the __DATA segment on MachO.
@@ -6176,36 +6092,37 @@ void CGObjCNonFragileABIMac::FinishNonFragileABIModule() {
// Build list of all implemented class addresses in array
// L_OBJC_LABEL_CLASS_$.
- for (unsigned i=0, NumClasses=ImplementedClasses.size(); i<NumClasses; i++) {
+ for (unsigned i = 0, NumClasses = ImplementedClasses.size(); i < NumClasses;
+ i++) {
const ObjCInterfaceDecl *ID = ImplementedClasses[i];
assert(ID);
if (ObjCImplementationDecl *IMP = ID->getImplementation())
// We are implementing a weak imported interface. Give it external linkage
if (ID->isWeakImported() && !IMP->isWeakImported()) {
DefinedClasses[i]->setLinkage(llvm::GlobalVariable::ExternalLinkage);
- DefinedMetaClasses[i]->setLinkage(llvm::GlobalVariable::ExternalLinkage);
+ DefinedMetaClasses[i]->setLinkage(
+ llvm::GlobalVariable::ExternalLinkage);
}
}
- AddModuleClassList(DefinedClasses, "OBJC_LABEL_CLASS_$",
- GetSectionName("__objc_classlist",
- "regular,no_dead_strip"));
+ AddModuleClassList(
+ DefinedClasses, "OBJC_LABEL_CLASS_$",
+ GetSectionName("__objc_classlist", "regular,no_dead_strip"));
- AddModuleClassList(DefinedNonLazyClasses, "OBJC_LABEL_NONLAZY_CLASS_$",
- GetSectionName("__objc_nlclslist",
- "regular,no_dead_strip"));
+ AddModuleClassList(
+ DefinedNonLazyClasses, "OBJC_LABEL_NONLAZY_CLASS_$",
+ GetSectionName("__objc_nlclslist", "regular,no_dead_strip"));
// Build list of all implemented category addresses in array
// L_OBJC_LABEL_CATEGORY_$.
AddModuleClassList(DefinedCategories, "OBJC_LABEL_CATEGORY_$",
- GetSectionName("__objc_catlist",
- "regular,no_dead_strip"));
- AddModuleClassList(DefinedStubCategories, "OBJC_LABEL_STUB_CATEGORY_$",
- GetSectionName("__objc_catlist2",
- "regular,no_dead_strip"));
- AddModuleClassList(DefinedNonLazyCategories, "OBJC_LABEL_NONLAZY_CATEGORY_$",
- GetSectionName("__objc_nlcatlist",
- "regular,no_dead_strip"));
+ GetSectionName("__objc_catlist", "regular,no_dead_strip"));
+ AddModuleClassList(
+ DefinedStubCategories, "OBJC_LABEL_STUB_CATEGORY_$",
+ GetSectionName("__objc_catlist2", "regular,no_dead_strip"));
+ AddModuleClassList(
+ DefinedNonLazyCategories, "OBJC_LABEL_NONLAZY_CATEGORY_$",
+ GetSectionName("__objc_nlcatlist", "regular,no_dead_strip"));
EmitImageInfo();
}
@@ -6264,7 +6181,7 @@ bool CGObjCNonFragileABIMac::isVTableDispatchedSelector(Selector Sel) {
&CGM.getContext().Idents.get("objects"),
&CGM.getContext().Idents.get("count")};
VTableDispatchMethods.insert(
- CGM.getContext().Selectors.getSelector(3, KeyIdents));
+ CGM.getContext().Selectors.getSelector(3, KeyIdents));
}
}
@@ -6286,11 +6203,9 @@ bool CGObjCNonFragileABIMac::isVTableDispatchedSelector(Selector Sel) {
/// const struct _prop_list_t * const properties;
/// }
///
-llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer(
- unsigned flags,
- unsigned InstanceStart,
- unsigned InstanceSize,
- const ObjCImplementationDecl *ID) {
+llvm::GlobalVariable *CGObjCNonFragileABIMac::BuildClassRoTInitializer(
+ unsigned flags, unsigned InstanceStart, unsigned InstanceSize,
+ const ObjCImplementationDecl *ID) {
std::string ClassName = std::string(ID->getObjCRuntimeNameAsString());
CharUnits beginInstance = CharUnits::fromQuantity(InstanceStart);
@@ -6309,12 +6224,12 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer(
values.addInt(ObjCTypes.IntTy, InstanceStart);
values.addInt(ObjCTypes.IntTy, InstanceSize);
values.add((flags & NonFragileABI_Class_Meta)
- ? GetIvarLayoutName(nullptr, ObjCTypes)
- : BuildStrongIvarLayout(ID, beginInstance, endInstance));
+ ? GetIvarLayoutName(nullptr, ObjCTypes)
+ : BuildStrongIvarLayout(ID, beginInstance, endInstance));
values.add(GetClassName(ID->getObjCRuntimeNameAsString()));
// const struct _method_list_t * const baseMethods;
- SmallVector<const ObjCMethodDecl*, 16> methods;
+ SmallVector<const ObjCMethodDecl *, 16> methods;
if (flags & NonFragileABI_Class_Meta) {
for (const auto *MD : ID->class_methods())
if (!MD->isDirectMethod())
@@ -6327,29 +6242,29 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer(
values.add(emitMethodList(ID->getObjCRuntimeNameAsString(),
(flags & NonFragileABI_Class_Meta)
- ? MethodListType::ClassMethods
- : MethodListType::InstanceMethods,
+ ? MethodListType::ClassMethods
+ : MethodListType::InstanceMethods,
methods));
const ObjCInterfaceDecl *OID = ID->getClassInterface();
assert(OID && "CGObjCNonFragileABIMac::BuildClassRoTInitializer");
- values.add(EmitProtocolList("_OBJC_CLASS_PROTOCOLS_$_"
- + OID->getObjCRuntimeNameAsString(),
+ values.add(EmitProtocolList("_OBJC_CLASS_PROTOCOLS_$_" +
+ OID->getObjCRuntimeNameAsString(),
OID->all_referenced_protocol_begin(),
OID->all_referenced_protocol_end()));
if (flags & NonFragileABI_Class_Meta) {
values.addNullPointer(ObjCTypes.IvarListnfABIPtrTy);
values.add(GetIvarLayoutName(nullptr, ObjCTypes));
- values.add(EmitPropertyList(
- "_OBJC_$_CLASS_PROP_LIST_" + ID->getObjCRuntimeNameAsString(),
- ID, ID->getClassInterface(), ObjCTypes, true));
+ values.add(EmitPropertyList("_OBJC_$_CLASS_PROP_LIST_" +
+ ID->getObjCRuntimeNameAsString(),
+ ID, ID->getClassInterface(), ObjCTypes, true));
} else {
values.add(EmitIvarList(ID));
values.add(BuildWeakIvarLayout(ID, beginInstance, endInstance, hasMRCWeak));
- values.add(EmitPropertyList(
- "_OBJC_$_PROP_LIST_" + ID->getObjCRuntimeNameAsString(),
- ID, ID->getClassInterface(), ObjCTypes, false));
+ values.add(EmitPropertyList("_OBJC_$_PROP_LIST_" +
+ ID->getObjCRuntimeNameAsString(),
+ ID, ID->getClassInterface(), ObjCTypes, false));
}
llvm::SmallString<64> roLabel;
@@ -6371,13 +6286,10 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer(
/// struct class_ro_t *ro;
/// }
///
-llvm::GlobalVariable *
-CGObjCNonFragileABIMac::BuildClassObject(const ObjCInterfaceDecl *CI,
- bool isMetaclass,
- llvm::Constant *IsAGV,
- llvm::Constant *SuperClassGV,
- llvm::Constant *ClassRoGV,
- bool HiddenVisibility) {
+llvm::GlobalVariable *CGObjCNonFragileABIMac::BuildClassObject(
+ const ObjCInterfaceDecl *CI, bool isMetaclass, llvm::Constant *IsAGV,
+ llvm::Constant *SuperClassGV, llvm::Constant *ClassRoGV,
+ bool HiddenVisibility) {
ConstantInitBuilder builder(CGM);
auto values = builder.beginStruct(ObjCTypes.ClassnfABITy);
values.add(IsAGV);
@@ -6390,8 +6302,8 @@ CGObjCNonFragileABIMac::BuildClassObject(const ObjCInterfaceDecl *CI,
values.add(ObjCEmptyVtableVar);
values.add(ClassRoGV);
- llvm::GlobalVariable *GV =
- cast<llvm::GlobalVariable>(GetClassGlobal(CI, isMetaclass, ForDefinition));
+ llvm::GlobalVariable *GV = cast<llvm::GlobalVariable>(
+ GetClassGlobal(CI, isMetaclass, ForDefinition));
values.finishAndSetAsInitializer(GV);
if (CGM.getTriple().isOSBinFormatMachO())
@@ -6414,7 +6326,7 @@ void CGObjCNonFragileABIMac::GetClassSizeInfo(const ObjCImplementationDecl *OID,
uint32_t &InstanceStart,
uint32_t &InstanceSize) {
const ASTRecordLayout &RL =
- CGM.getContext().getASTObjCImplementationLayout(OID);
+ CGM.getContext().getASTObjCImplementationLayout(OID);
// InstanceSize is really instance end.
InstanceSize = RL.getDataSize().getQuantity();
@@ -6448,27 +6360,26 @@ static llvm::GlobalValue::DLLStorageClassTypes getStorage(CodeGenModule &CGM,
void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
if (!ObjCEmptyCacheVar) {
- ObjCEmptyCacheVar =
- new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.CacheTy, false,
- llvm::GlobalValue::ExternalLinkage, nullptr,
- "_objc_empty_cache");
+ ObjCEmptyCacheVar = new llvm::GlobalVariable(
+ CGM.getModule(), ObjCTypes.CacheTy, false,
+ llvm::GlobalValue::ExternalLinkage, nullptr, "_objc_empty_cache");
if (CGM.getTriple().isOSBinFormatCOFF())
- ObjCEmptyCacheVar->setDLLStorageClass(getStorage(CGM, "_objc_empty_cache"));
+ ObjCEmptyCacheVar->setDLLStorageClass(
+ getStorage(CGM, "_objc_empty_cache"));
// Only OS X with deployment version <10.9 use the empty vtable symbol
const llvm::Triple &Triple = CGM.getTarget().getTriple();
if (Triple.isMacOSX() && Triple.isMacOSXVersionLT(10, 9))
- ObjCEmptyVtableVar =
- new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ImpnfABITy, false,
- llvm::GlobalValue::ExternalLinkage, nullptr,
- "_objc_empty_vtable");
+ ObjCEmptyVtableVar = new llvm::GlobalVariable(
+ CGM.getModule(), ObjCTypes.ImpnfABITy, false,
+ llvm::GlobalValue::ExternalLinkage, nullptr, "_objc_empty_vtable");
else
ObjCEmptyVtableVar = llvm::ConstantPointerNull::get(CGM.UnqualPtrTy);
}
// FIXME: Is this correct (that meta class size is never computed)?
uint32_t InstanceStart =
- CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ClassnfABITy);
+ CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ClassnfABITy);
uint32_t InstanceSize = InstanceStart;
uint32_t flags = NonFragileABI_Class_Meta;
@@ -6512,9 +6423,8 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
llvm::GlobalVariable *CLASS_RO_GV =
BuildClassRoTInitializer(flags, InstanceStart, InstanceSize, ID);
- llvm::GlobalVariable *MetaTClass =
- BuildClassObject(CI, /*metaclass*/ true,
- IsAGV, SuperClassGV, CLASS_RO_GV, classIsHidden);
+ llvm::GlobalVariable *MetaTClass = BuildClassObject(
+ CI, /*metaclass*/ true, IsAGV, SuperClassGV, CLASS_RO_GV, classIsHidden);
CGM.setGVProperties(MetaTClass, CI);
DefinedMetaClasses.push_back(MetaTClass);
@@ -6553,8 +6463,8 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
BuildClassRoTInitializer(flags, InstanceStart, InstanceSize, ID);
llvm::GlobalVariable *ClassMD =
- BuildClassObject(CI, /*metaclass*/ false,
- MetaTClass, SuperClassGV, CLASS_RO_GV, classIsHidden);
+ BuildClassObject(CI, /*metaclass*/ false, MetaTClass, SuperClassGV,
+ CLASS_RO_GV, classIsHidden);
CGM.setGVProperties(ClassMD, CI);
DefinedClasses.push_back(ClassMD);
ImplementedClasses.push_back(CI);
@@ -6565,7 +6475,7 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
// Force the definition of the EHType if necessary.
if (flags & NonFragileABI_Class_Exception)
- (void) GetInterfaceEHType(CI, ForDefinition);
+ (void)GetInterfaceEHType(CI, ForDefinition);
// Make sure method definition entries are all clear for next implementation.
MethodDefinitions.clear();
}
@@ -6578,8 +6488,9 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
/// It generates a weak reference to l_OBJC_PROTOCOL_REFERENCE_$_Proto1
/// which will hold address of the protocol meta-data.
///
-llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF,
- const ObjCProtocolDecl *PD) {
+llvm::Value *
+CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF,
+ const ObjCProtocolDecl *PD) {
// This routine is called for @protocol only. So, we must build definition
// of protocol's meta-data (not a reference to it!)
@@ -6598,8 +6509,8 @@ llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF,
PTGV = new llvm::GlobalVariable(CGM.getModule(), Init->getType(), false,
llvm::GlobalValue::WeakAnyLinkage, Init,
ProtocolName);
- PTGV->setSection(GetSectionName("__objc_protorefs",
- "coalesced,no_dead_strip"));
+ PTGV->setSection(
+ GetSectionName("__objc_protorefs", "coalesced,no_dead_strip"));
PTGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
PTGV->setAlignment(Align.getAsAlign());
if (!CGM.getTriple().isOSBinFormatMachO())
@@ -6749,9 +6660,8 @@ void CGObjCNonFragileABIMac::emitMethodConstant(ConstantArrayBuilder &builder,
/// struct _objc_method method_list[method_count];
/// }
///
-llvm::Constant *
-CGObjCNonFragileABIMac::emitMethodList(Twine name, MethodListType kind,
- ArrayRef<const ObjCMethodDecl *> methods) {
+llvm::Constant *CGObjCNonFragileABIMac::emitMethodList(
+ Twine name, MethodListType kind, ArrayRef<const ObjCMethodDecl *> methods) {
// Return null for empty list.
if (methods.empty())
return llvm::Constant::getNullValue(ObjCTypes.MethodListnfABIPtrTy);
@@ -6824,10 +6734,9 @@ CGObjCNonFragileABIMac::ObjCIvarOffsetVariable(const ObjCInterfaceDecl *ID,
Name += Ivar->getName();
llvm::GlobalVariable *IvarOffsetGV = CGM.getModule().getGlobalVariable(Name);
if (!IvarOffsetGV) {
- IvarOffsetGV =
- new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.IvarOffsetVarTy,
- false, llvm::GlobalValue::ExternalLinkage,
- nullptr, Name.str());
+ IvarOffsetGV = new llvm::GlobalVariable(
+ CGM.getModule(), ObjCTypes.IvarOffsetVarTy, false,
+ llvm::GlobalValue::ExternalLinkage, nullptr, Name.str());
if (CGM.getTriple().isOSBinFormatCOFF()) {
bool IsPrivateOrPackage =
Ivar->getAccessControl() == ObjCIvarDecl::Private ||
@@ -6836,11 +6745,11 @@ CGObjCNonFragileABIMac::ObjCIvarOffsetVariable(const ObjCInterfaceDecl *ID,
const ObjCInterfaceDecl *ContainingID = Ivar->getContainingInterface();
if (ContainingID->hasAttr<DLLImportAttr>())
- IvarOffsetGV
- ->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
+ IvarOffsetGV->setDLLStorageClass(
+ llvm::GlobalValue::DLLImportStorageClass);
else if (ContainingID->hasAttr<DLLExportAttr>() && !IsPrivateOrPackage)
- IvarOffsetGV
- ->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
+ IvarOffsetGV->setDLLStorageClass(
+ llvm::GlobalValue::DLLExportStorageClass);
}
}
return IvarOffsetGV;
@@ -6895,8 +6804,8 @@ CGObjCNonFragileABIMac::EmitIvarOffsetVar(const ObjCInterfaceDecl *ID,
/// }
///
-llvm::Constant *CGObjCNonFragileABIMac::EmitIvarList(
- const ObjCImplementationDecl *ID) {
+llvm::Constant *
+CGObjCNonFragileABIMac::EmitIvarList(const ObjCImplementationDecl *ID) {
ConstantInitBuilder builder(CGM);
auto ivarList = builder.beginStruct();
@@ -6910,8 +6819,8 @@ llvm::Constant *CGObjCNonFragileABIMac::EmitIvarList(
// FIXME. Consolidate this with similar code in GenerateClass.
- for (const ObjCIvarDecl *IVD = OID->all_declared_ivar_begin();
- IVD; IVD = IVD->getNextIvar()) {
+ for (const ObjCIvarDecl *IVD = OID->all_declared_ivar_begin(); IVD;
+ IVD = IVD->getNextIvar()) {
// Ignore unnamed bit-fields.
if (!IVD->getDeclName())
continue;
@@ -6921,11 +6830,11 @@ llvm::Constant *CGObjCNonFragileABIMac::EmitIvarList(
ComputeIvarBaseOffset(CGM, ID, IVD)));
ivar.add(GetMethodVarName(IVD->getIdentifier()));
ivar.add(GetMethodVarType(IVD));
- llvm::Type *FieldTy =
- CGM.getTypes().ConvertTypeForMem(IVD->getType());
+ llvm::Type *FieldTy = CGM.getTypes().ConvertTypeForMem(IVD->getType());
unsigned Size = CGM.getDataLayout().getTypeAllocSize(FieldTy);
- unsigned Align = CGM.getContext().getPreferredTypeAlign(
- IVD->getType().getTypePtr()) >> 3;
+ unsigned Align =
+ CGM.getContext().getPreferredTypeAlign(IVD->getType().getTypePtr()) >>
+ 3;
Align = llvm::Log2_32(Align);
ivar.addInt(ObjCTypes.IntTy, Align);
// NOTE. Size of a bitfield does not match gcc's, because of the
@@ -6954,8 +6863,8 @@ llvm::Constant *CGObjCNonFragileABIMac::EmitIvarList(
return GV;
}
-llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocolRef(
- const ObjCProtocolDecl *PD) {
+llvm::Constant *
+CGObjCNonFragileABIMac::GetOrEmitProtocolRef(const ObjCProtocolDecl *PD) {
llvm::GlobalVariable *&Entry = Protocols[PD->getIdentifier()];
assert(!PD->isNonRuntimeProtocol() &&
@@ -6965,8 +6874,8 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocolRef(
// reference or not. At module finalization we add the empty
// contents for protocols which were referenced but never defined.
llvm::SmallString<64> Protocol;
- llvm::raw_svector_ostream(Protocol) << "_OBJC_PROTOCOL_$_"
- << PD->getObjCRuntimeNameAsString();
+ llvm::raw_svector_ostream(Protocol)
+ << "_OBJC_PROTOCOL_$_" << PD->getObjCRuntimeNameAsString();
Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABITy,
false, llvm::GlobalValue::ExternalLinkage,
@@ -6998,8 +6907,8 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocolRef(
/// @endcode
///
-llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
- const ObjCProtocolDecl *PD) {
+llvm::Constant *
+CGObjCNonFragileABIMac::GetOrEmitProtocol(const ObjCProtocolDecl *PD) {
llvm::GlobalVariable *Entry = Protocols[PD->getIdentifier()];
// Early exit if a defining object has already been generated.
@@ -7019,36 +6928,34 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
// isa is NULL
values.addNullPointer(ObjCTypes.ObjectPtrTy);
values.add(GetClassName(PD->getObjCRuntimeNameAsString()));
- values.add(EmitProtocolList("_OBJC_$_PROTOCOL_REFS_"
- + PD->getObjCRuntimeNameAsString(),
- PD->protocol_begin(),
- PD->protocol_end()));
- values.add(methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::RequiredInstanceMethods));
- values.add(methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::RequiredClassMethods));
- values.add(methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::OptionalInstanceMethods));
- values.add(methodLists.emitMethodList(this, PD,
- ProtocolMethodLists::OptionalClassMethods));
- values.add(EmitPropertyList(
- "_OBJC_$_PROP_LIST_" + PD->getObjCRuntimeNameAsString(),
- nullptr, PD, ObjCTypes, false));
+ values.add(EmitProtocolList("_OBJC_$_PROTOCOL_REFS_" +
+ PD->getObjCRuntimeNameAsString(),
+ PD->protocol_begin(), PD->protocol_end()));
+ values.add(methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::RequiredInstanceMethods));
+ values.add(methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::RequiredClassMethods));
+ values.add(methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::OptionalInstanceMethods));
+ values.add(methodLists.emitMethodList(
+ this, PD, ProtocolMethodLists::OptionalClassMethods));
+ values.add(
+ EmitPropertyList("_OBJC_$_PROP_LIST_" + PD->getObjCRuntimeNameAsString(),
+ nullptr, PD, ObjCTypes, false));
uint32_t Size =
- CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ProtocolnfABITy);
+ CGM.getDataLayout().getTypeAllocSize(ObjCTypes.ProtocolnfABITy);
values.addInt(ObjCTypes.IntTy, Size);
values.addInt(ObjCTypes.IntTy, 0);
- values.add(EmitProtocolMethodTypes("_OBJC_$_PROTOCOL_METHOD_TYPES_"
- + PD->getObjCRuntimeNameAsString(),
- methodLists.emitExtendedTypesArray(this),
- ObjCTypes));
+ values.add(EmitProtocolMethodTypes(
+ "_OBJC_$_PROTOCOL_METHOD_TYPES_" + PD->getObjCRuntimeNameAsString(),
+ methodLists.emitExtendedTypesArray(this), ObjCTypes));
// const char *demangledName;
values.addNullPointer(ObjCTypes.Int8PtrTy);
- values.add(EmitPropertyList(
- "_OBJC_$_CLASS_PROP_LIST_" + PD->getObjCRuntimeNameAsString(),
- nullptr, PD, ObjCTypes, true));
+ values.add(EmitPropertyList("_OBJC_$_CLASS_PROP_LIST_" +
+ PD->getObjCRuntimeNameAsString(),
+ nullptr, PD, ObjCTypes, true));
if (Entry) {
// Already created, fix the linkage and update the initializer.
@@ -7057,7 +6964,7 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
} else {
llvm::SmallString<64> symbolName;
llvm::raw_svector_ostream(symbolName)
- << "_OBJC_PROTOCOL_$_" << PD->getObjCRuntimeNameAsString();
+ << "_OBJC_PROTOCOL_$_" << PD->getObjCRuntimeNameAsString();
Entry = values.finishAndCreateGlobal(symbolName, CGM.getPointerAlign(),
/*constant*/ false,
@@ -7073,19 +6980,18 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
// Use this protocol meta-data to build protocol list table in section
// __DATA, __objc_protolist
llvm::SmallString<64> ProtocolRef;
- llvm::raw_svector_ostream(ProtocolRef) << "_OBJC_LABEL_PROTOCOL_$_"
- << PD->getObjCRuntimeNameAsString();
+ llvm::raw_svector_ostream(ProtocolRef)
+ << "_OBJC_LABEL_PROTOCOL_$_" << PD->getObjCRuntimeNameAsString();
- llvm::GlobalVariable *PTGV =
- new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABIPtrTy,
- false, llvm::GlobalValue::WeakAnyLinkage, Entry,
- ProtocolRef);
+ llvm::GlobalVariable *PTGV = new llvm::GlobalVariable(
+ CGM.getModule(), ObjCTypes.ProtocolnfABIPtrTy, false,
+ llvm::GlobalValue::WeakAnyLinkage, Entry, ProtocolRef);
if (!CGM.getTriple().isOSBinFormatMachO())
PTGV->setComdat(CGM.getModule().getOrInsertComdat(ProtocolRef));
PTGV->setAlignment(
CGM.getDataLayout().getABITypeAlign(ObjCTypes.ProtocolnfABIPtrTy));
- PTGV->setSection(GetSectionName("__objc_protolist",
- "coalesced,no_dead_strip"));
+ PTGV->setSection(
+ GetSectionName("__objc_protolist", "coalesced,no_dead_strip"));
PTGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
CGM.addUsedGlobal(PTGV);
return Entry;
@@ -7099,10 +7005,9 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
/// }
/// @endcode
///
-llvm::Constant *
-CGObjCNonFragileABIMac::EmitProtocolList(Twine Name,
- ObjCProtocolDecl::protocol_iterator begin,
- ObjCProtocolDecl::protocol_iterator end) {
+llvm::Constant *CGObjCNonFragileABIMac::EmitProtocolList(
+ Twine Name, ObjCProtocolDecl::protocol_iterator begin,
+ ObjCProtocolDecl::protocol_iterator end) {
// Just return null for empty protocol lists
auto Protocols = GetRuntimeProtocolList(begin, end);
if (Protocols.empty())
@@ -7123,7 +7028,7 @@ CGObjCNonFragileABIMac::EmitProtocolList(Twine Name,
SmallString<256> TmpName;
Name.toVector(TmpName);
llvm::GlobalVariable *GV =
- CGM.getModule().getGlobalVariable(TmpName.str(), true);
+ CGM.getModule().getGlobalVariable(TmpName.str(), true);
if (GV)
return GV;
@@ -7153,11 +7058,8 @@ CGObjCNonFragileABIMac::EmitProtocolList(Twine Name,
/// @encode
///
LValue CGObjCNonFragileABIMac::EmitObjCValueForIvar(
- CodeGen::CodeGenFunction &CGF,
- QualType ObjectTy,
- llvm::Value *BaseValue,
- const ObjCIvarDecl *Ivar,
- unsigned CVRQualifiers) {
+ CodeGen::CodeGenFunction &CGF, QualType ObjectTy, llvm::Value *BaseValue,
+ const ObjCIvarDecl *Ivar, unsigned CVRQualifiers) {
ObjCInterfaceDecl *ID = ObjectTy->castAs<ObjCObjectType>()->getInterface();
llvm::Value *Offset = EmitIvarOffset(CGF, ID, Ivar);
return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
@@ -7175,9 +7077,8 @@ CGObjCNonFragileABIMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
ComputeIvarBaseOffset(CGM, Interface->getImplementation(), Ivar));
} else {
llvm::GlobalVariable *GV = ObjCIvarOffsetVariable(Interface, Ivar);
- IvarOffsetValue =
- CGF.Builder.CreateAlignedLoad(GV->getValueType(), GV,
- CGF.getSizeAlign(), "ivar");
+ IvarOffsetValue = CGF.Builder.CreateAlignedLoad(GV->getValueType(), GV,
+ CGF.getSizeAlign(), "ivar");
if (IsIvarOffsetKnownIdempotent(CGF, Ivar))
cast<llvm::LoadInst>(IvarOffsetValue)
->setMetadata(llvm::LLVMContext::MD_invariant_load,
@@ -7216,16 +7117,10 @@ static void appendSelectorForMessageRefTable(std::string &buffer,
/// appropriate vtable slot, and if not, it substitues a stub function
/// which tail-calls objc_msgSend. Both stubs adjust the selector
/// argument to correctly point to the selector.
-RValue
-CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
- ReturnValueSlot returnSlot,
- QualType resultType,
- Selector selector,
- llvm::Value *arg0,
- QualType arg0Type,
- bool isSuper,
- const CallArgList &formalArgs,
- const ObjCMethodDecl *method) {
+RValue CGObjCNonFragileABIMac::EmitVTableMessageSend(
+ CodeGenFunction &CGF, ReturnValueSlot returnSlot, QualType resultType,
+ Selector selector, llvm::Value *arg0, QualType arg0Type, bool isSuper,
+ const CallArgList &formalArgs, const ObjCMethodDecl *method) {
// Compute the actual arguments.
CallArgList args;
@@ -7281,18 +7176,17 @@ CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
// would have used colons.
appendSelectorForMessageRefTable(messageRefName, selector);
- llvm::GlobalVariable *messageRef
- = CGM.getModule().getGlobalVariable(messageRefName);
+ llvm::GlobalVariable *messageRef =
+ CGM.getModule().getGlobalVariable(messageRefName);
if (!messageRef) {
// Build the message ref structure.
ConstantInitBuilder builder(CGM);
auto values = builder.beginStruct();
values.add(cast<llvm::Constant>(fn.getCallee()));
values.add(GetMethodVarName(selector));
- messageRef = values.finishAndCreateGlobal(messageRefName,
- CharUnits::fromQuantity(16),
- /*constant*/ false,
- llvm::GlobalValue::WeakAnyLinkage);
+ messageRef = values.finishAndCreateGlobal(
+ messageRefName, CharUnits::fromQuantity(16),
+ /*constant*/ false, llvm::GlobalValue::WeakAnyLinkage);
messageRef->setVisibility(llvm::GlobalValue::HiddenVisibility);
messageRef->setSection(GetSectionName("__objc_msgrefs", "coalesced"));
}
@@ -7309,8 +7203,8 @@ CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
}
Address mref =
- Address(CGF.Builder.CreateBitCast(messageRef, ObjCTypes.MessageRefPtrTy),
- ObjCTypes.MessageRefTy, CGF.getPointerAlign());
+ Address(CGF.Builder.CreateBitCast(messageRef, ObjCTypes.MessageRefPtrTy),
+ ObjCTypes.MessageRefTy, CGF.getPointerAlign());
// Update the message ref argument.
args[1].setRValue(RValue::get(mref, CGF));
@@ -7328,22 +7222,17 @@ CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
}
/// Generate code for a message send expression in the nonfragile abi.
-CodeGen::RValue
-CGObjCNonFragileABIMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- llvm::Value *Receiver,
- const CallArgList &CallArgs,
- const ObjCInterfaceDecl *Class,
- const ObjCMethodDecl *Method) {
+CodeGen::RValue CGObjCNonFragileABIMac::GenerateMessageSend(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
+ Selector Sel, llvm::Value *Receiver, const CallArgList &CallArgs,
+ const ObjCInterfaceDecl *Class, const ObjCMethodDecl *Method) {
return isVTableDispatchedSelector(Sel)
- ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
- Receiver, CGF.getContext().getObjCIdType(),
- false, CallArgs, Method)
- : EmitMessageSend(CGF, Return, ResultType, Sel,
- Receiver, CGF.getContext().getObjCIdType(),
- false, CallArgs, Method, Class, ObjCTypes);
+ ? EmitVTableMessageSend(CGF, Return, ResultType, Sel, Receiver,
+ CGF.getContext().getObjCIdType(), false,
+ CallArgs, Method)
+ : EmitMessageSend(CGF, Return, ResultType, Sel, Receiver,
+ CGF.getContext().getObjCIdType(), false,
+ CallArgs, Method, Class, ObjCTypes);
}
llvm::Constant *
@@ -7351,13 +7240,12 @@ CGObjCNonFragileABIMac::GetClassGlobal(const ObjCInterfaceDecl *ID,
bool metaclass,
ForDefinition_t isForDefinition) {
auto prefix =
- (metaclass ? getMetaclassSymbolPrefix() : getClassSymbolPrefix());
+ (metaclass ? getMetaclassSymbolPrefix() : getClassSymbolPrefix());
return GetClassGlobal((prefix + ID->getObjCRuntimeNameAsString()).str(),
- isForDefinition,
- ID->isWeakImported(),
- !isForDefinition
- && CGM.getTriple().isOSBinFormatCOFF()
- && ID->hasAttr<DLLImportAttr>());
+ isForDefinition, ID->isWeakImported(),
+ !isForDefinition &&
+ CGM.getTriple().isOSBinFormatCOFF() &&
+ ID->hasAttr<DLLImportAttr>());
}
llvm::Constant *
@@ -7390,8 +7278,8 @@ CGObjCNonFragileABIMac::GetClassGlobal(StringRef Name,
llvm::Constant *
CGObjCNonFragileABIMac::GetClassGlobalForClassRef(const ObjCInterfaceDecl *ID) {
- llvm::Constant *ClassGV = GetClassGlobal(ID, /*metaclass*/ false,
- NotForDefinition);
+ llvm::Constant *ClassGV =
+ GetClassGlobal(ID, /*metaclass*/ false, NotForDefinition);
if (!ID->hasAttr<ObjCClassStubAttr>())
return ClassGV;
@@ -7411,18 +7299,16 @@ CGObjCNonFragileABIMac::EmitLoadOfClassRef(CodeGenFunction &CGF,
if (ID && ID->hasAttr<ObjCClassStubAttr>()) {
// Classrefs pointing at Objective-C stub classes must be loaded by calling
// a special runtime function.
- return CGF.EmitRuntimeCall(
- ObjCTypes.getLoadClassrefFn(), Entry, "load_classref_result");
+ return CGF.EmitRuntimeCall(ObjCTypes.getLoadClassrefFn(), Entry,
+ "load_classref_result");
}
CharUnits Align = CGF.getPointerAlign();
return CGF.Builder.CreateAlignedLoad(Entry->getValueType(), Entry, Align);
}
-llvm::Value *
-CGObjCNonFragileABIMac::EmitClassRefFromId(CodeGenFunction &CGF,
- IdentifierInfo *II,
- const ObjCInterfaceDecl *ID) {
+llvm::Value *CGObjCNonFragileABIMac::EmitClassRefFromId(
+ CodeGenFunction &CGF, IdentifierInfo *II, const ObjCInterfaceDecl *ID) {
llvm::GlobalVariable *&Entry = ClassReferences[II];
if (!Entry) {
@@ -7462,8 +7348,8 @@ llvm::Value *CGObjCNonFragileABIMac::EmitClassRef(CodeGenFunction &CGF,
return EmitClassRefFromId(CGF, ID->getIdentifier(), ID);
}
-llvm::Value *CGObjCNonFragileABIMac::EmitNSAutoreleasePoolClassRef(
- CodeGenFunction &CGF) {
+llvm::Value *
+CGObjCNonFragileABIMac::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
IdentifierInfo *II = &CGM.getContext().Idents.get("NSAutoreleasePool");
return EmitClassRefFromId(CGF, II, nullptr);
}
@@ -7491,11 +7377,10 @@ CGObjCNonFragileABIMac::EmitSuperClassRef(CodeGenFunction &CGF,
/// EmitMetaClassRef - Return a Value * of the address of _class_t
/// meta-data
///
-llvm::Value *CGObjCNonFragileABIMac::EmitMetaClassRef(CodeGenFunction &CGF,
- const ObjCInterfaceDecl *ID,
- bool Weak) {
+llvm::Value *CGObjCNonFragileABIMac::EmitMetaClassRef(
+ CodeGenFunction &CGF, const ObjCInterfaceDecl *ID, bool Weak) {
CharUnits Align = CGF.getPointerAlign();
- llvm::GlobalVariable * &Entry = MetaClassReferences[ID->getIdentifier()];
+ llvm::GlobalVariable *&Entry = MetaClassReferences[ID->getIdentifier()];
if (!Entry) {
auto MetaClassGV = GetClassGlobal(ID, /*metaclass*/ true, NotForDefinition);
std::string SectionName =
@@ -7528,17 +7413,11 @@ llvm::Value *CGObjCNonFragileABIMac::GetClass(CodeGenFunction &CGF,
/// Generates a message send where the super is the receiver. This is
/// a message send to self with special delivery semantics indicating
/// which class's method should be called.
-CodeGen::RValue
-CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- const ObjCInterfaceDecl *Class,
- bool isCategoryImpl,
- llvm::Value *Receiver,
- bool IsClassMessage,
- const CodeGen::CallArgList &CallArgs,
- const ObjCMethodDecl *Method) {
+CodeGen::RValue CGObjCNonFragileABIMac::GenerateMessageSendSuper(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
+ Selector Sel, const ObjCInterfaceDecl *Class, bool isCategoryImpl,
+ llvm::Value *Receiver, bool IsClassMessage,
+ const CodeGen::CallArgList &CallArgs, const ObjCMethodDecl *Method) {
// ...
// Create and init a super structure; this is a (receiver, class)
// pair we will pass to objc_msgSendSuper.
@@ -7546,38 +7425,38 @@ CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
ObjCTypes.SuperTy, CGF.getPointerAlign(), "objc_super");
llvm::Value *ReceiverAsObject =
- CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
+ CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
CGF.Builder.CreateStore(ReceiverAsObject,
CGF.Builder.CreateStructGEP(ObjCSuper, 0));
// If this is a class message the metaclass is passed as the target.
llvm::Value *Target;
if (IsClassMessage)
- Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
+ Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
else
Target = EmitSuperClassRef(CGF, Class);
// FIXME: We shouldn't need to do this cast, rectify the ASTContext and
// ObjCTypes types.
llvm::Type *ClassTy =
- CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
+ CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
Target = CGF.Builder.CreateBitCast(Target, ClassTy);
CGF.Builder.CreateStore(Target, CGF.Builder.CreateStructGEP(ObjCSuper, 1));
return (isVTableDispatchedSelector(Sel))
- ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
- ObjCSuper.getPointer(), ObjCTypes.SuperPtrCTy,
- true, CallArgs, Method)
- : EmitMessageSend(CGF, Return, ResultType, Sel,
- ObjCSuper.getPointer(), ObjCTypes.SuperPtrCTy,
- true, CallArgs, Method, Class, ObjCTypes);
+ ? EmitVTableMessageSend(
+ CGF, Return, ResultType, Sel, ObjCSuper.getPointer(),
+ ObjCTypes.SuperPtrCTy, true, CallArgs, Method)
+ : EmitMessageSend(CGF, Return, ResultType, Sel,
+ ObjCSuper.getPointer(), ObjCTypes.SuperPtrCTy,
+ true, CallArgs, Method, Class, ObjCTypes);
}
llvm::Value *CGObjCNonFragileABIMac::EmitSelector(CodeGenFunction &CGF,
Selector Sel) {
Address Addr = EmitSelectorAddr(Sel);
- llvm::LoadInst* LI = CGF.Builder.CreateLoad(Addr);
+ llvm::LoadInst *LI = CGF.Builder.CreateLoad(Addr);
LI->setMetadata(llvm::LLVMContext::MD_invariant_load,
llvm::MDNode::get(VMContext, {}));
return LI;
@@ -7606,15 +7485,14 @@ ConstantAddress CGObjCNonFragileABIMac::EmitSelectorAddr(Selector Sel) {
/// objc_assign_ivar (id src, id *dst, ptrdiff_t)
///
void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src,
- Address dst,
+ llvm::Value *src, Address dst,
llvm::Value *ivarOffset) {
- llvm::Type * SrcTy = src->getType();
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
- : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
+ : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
}
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
@@ -7628,22 +7506,21 @@ void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
/// objc_assign_strongCast (id src, id *dst)
///
void CGObjCNonFragileABIMac::EmitObjCStrongCastAssign(
- CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dst) {
- llvm::Type * SrcTy = src->getType();
+ CodeGen::CodeGenFunction &CGF, llvm::Value *src, Address dst) {
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
- : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
+ : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
}
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
ObjCTypes.PtrObjectPtrTy);
llvm::Value *args[] = {src, dstVal};
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
- args, "weakassign");
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(), args,
+ "weakassign");
}
void CGObjCNonFragileABIMac::EmitGCMemmoveCollectable(
@@ -7657,15 +7534,14 @@ void CGObjCNonFragileABIMac::EmitGCMemmoveCollectable(
/// EmitObjCWeakRead - Code gen for loading value of a __weak
/// object: objc_read_weak (id *src)
///
-llvm::Value * CGObjCNonFragileABIMac::EmitObjCWeakRead(
- CodeGen::CodeGenFunction &CGF,
- Address AddrWeakObj) {
+llvm::Value *
+CGObjCNonFragileABIMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
+ Address AddrWeakObj) {
llvm::Type *DestTy = AddrWeakObj.getElementType();
llvm::Value *AddrWeakObjVal = CGF.Builder.CreateBitCast(
AddrWeakObj.emitRawPointer(CGF), ObjCTypes.PtrObjectPtrTy);
- llvm::Value *read_weak =
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
- AddrWeakObjVal, "weakread");
+ llvm::Value *read_weak = CGF.EmitNounwindRuntimeCall(
+ ObjCTypes.getGcReadWeakFn(), AddrWeakObjVal, "weakread");
read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
return read_weak;
}
@@ -7675,34 +7551,34 @@ llvm::Value * CGObjCNonFragileABIMac::EmitObjCWeakRead(
///
void CGObjCNonFragileABIMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst) {
- llvm::Type * SrcTy = src->getType();
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
- : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
+ : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
}
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
ObjCTypes.PtrObjectPtrTy);
llvm::Value *args[] = {src, dstVal};
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
- args, "weakassign");
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(), args,
+ "weakassign");
}
/// EmitObjCGlobalAssign - Code gen for assigning to a __strong object.
/// objc_assign_global (id src, id *dst)
///
void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
- llvm::Value *src, Address dst,
- bool threadlocal) {
- llvm::Type * SrcTy = src->getType();
+ llvm::Value *src, Address dst,
+ bool threadlocal) {
+ llvm::Type *SrcTy = src->getType();
if (!isa<llvm::PointerType>(SrcTy)) {
unsigned Size = CGM.getDataLayout().getTypeAllocSize(SrcTy);
assert(Size <= 8 && "does not support size > 8");
src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
- : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
+ : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
}
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
@@ -7710,30 +7586,27 @@ void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
ObjCTypes.PtrObjectPtrTy);
llvm::Value *args[] = {src, dstVal};
if (!threadlocal)
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
- args, "globalassign");
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(), args,
+ "globalassign");
else
- CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
- args, "threadlocalassign");
+ CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(), args,
+ "threadlocalassign");
}
-void
-CGObjCNonFragileABIMac::EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
- const ObjCAtSynchronizedStmt &S) {
+void CGObjCNonFragileABIMac::EmitSynchronizedStmt(
+ CodeGen::CodeGenFunction &CGF, const ObjCAtSynchronizedStmt &S) {
EmitAtSynchronizedStmt(CGF, S, ObjCTypes.getSyncEnterFn(),
ObjCTypes.getSyncExitFn());
}
-llvm::Constant *
-CGObjCNonFragileABIMac::GetEHType(QualType T) {
+llvm::Constant *CGObjCNonFragileABIMac::GetEHType(QualType T) {
// There's a particular fixed type info for 'id'.
if (T->isObjCIdType() || T->isObjCQualifiedIdType()) {
auto *IDEHType = CGM.getModule().getGlobalVariable("OBJC_EHTYPE_id");
if (!IDEHType) {
- IDEHType =
- new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false,
- llvm::GlobalValue::ExternalLinkage, nullptr,
- "OBJC_EHTYPE_id");
+ IDEHType = new llvm::GlobalVariable(
+ CGM.getModule(), ObjCTypes.EHTypeTy, false,
+ llvm::GlobalValue::ExternalLinkage, nullptr, "OBJC_EHTYPE_id");
if (CGM.getTriple().isOSBinFormatCOFF())
IDEHType->setDLLStorageClass(getStorage(CGM, "OBJC_EHTYPE_id"));
}
@@ -7781,7 +7654,7 @@ void CGObjCNonFragileABIMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
llvm::Constant *
CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
ForDefinition_t IsForDefinition) {
- llvm::GlobalVariable * &Entry = EHTypeReferences[ID->getIdentifier()];
+ llvm::GlobalVariable *&Entry = EHTypeReferences[ID->getIdentifier()];
StringRef ClassName = ID->getObjCRuntimeNameAsString();
// If we don't need a definition, return the entry if found or check
@@ -7794,9 +7667,9 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
// attribute, emit an external reference.
if (hasObjCExceptionAttribute(CGM.getContext(), ID)) {
std::string EHTypeName = ("OBJC_EHTYPE_$_" + ClassName).str();
- Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy,
- false, llvm::GlobalValue::ExternalLinkage,
- nullptr, EHTypeName);
+ Entry = new llvm::GlobalVariable(
+ CGM.getModule(), ObjCTypes.EHTypeTy, false,
+ llvm::GlobalValue::ExternalLinkage, nullptr, EHTypeName);
CGM.setGVProperties(Entry, ID);
return Entry;
}
@@ -7808,10 +7681,9 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
std::string VTableName = "objc_ehtype_vtable";
auto *VTableGV = CGM.getModule().getGlobalVariable(VTableName);
if (!VTableGV) {
- VTableGV =
- new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.Int8PtrTy, false,
- llvm::GlobalValue::ExternalLinkage, nullptr,
- VTableName);
+ VTableGV = new llvm::GlobalVariable(
+ CGM.getModule(), ObjCTypes.Int8PtrTy, false,
+ llvm::GlobalValue::ExternalLinkage, nullptr, VTableName);
if (CGM.getTriple().isOSBinFormatCOFF())
VTableGV->setDLLStorageClass(getStorage(CGM, VTableName));
}
@@ -7819,9 +7691,8 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
llvm::Value *VTableIdx = llvm::ConstantInt::get(CGM.Int32Ty, 2);
ConstantInitBuilder builder(CGM);
auto values = builder.beginStruct(ObjCTypes.EHTypeTy);
- values.add(
- llvm::ConstantExpr::getInBoundsGetElementPtr(VTableGV->getValueType(),
- VTableGV, VTableIdx));
+ values.add(llvm::ConstantExpr::getInBoundsGetElementPtr(
+ VTableGV->getValueType(), VTableGV, VTableIdx));
values.add(GetClassName(ClassName));
values.add(GetClassGlobal(ID, /*metaclass*/ false, NotForDefinition));
@@ -7834,8 +7705,7 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
} else {
Entry = values.finishAndCreateGlobal("OBJC_EHTYPE_$_" + ClassName,
CGM.getPointerAlign(),
- /*constant*/ false,
- L);
+ /*constant*/ false, L);
if (hasObjCExceptionAttribute(CGM.getContext(), ID))
CGM.setGVProperties(Entry, ID);
}
@@ -7858,7 +7728,7 @@ CodeGen::CGObjCRuntime *
CodeGen::CreateMacObjCRuntime(CodeGen::CodeGenModule &CGM) {
switch (CGM.getLangOpts().ObjCRuntime.getKind()) {
case ObjCRuntime::FragileMacOSX:
- return new CGObjCMac(CGM);
+ return new CGObjCMac(CGM);
case ObjCRuntime::MacOSX:
case ObjCRuntime::iOS:
diff --git a/clang/lib/CodeGen/CGObjCRuntime.h b/clang/lib/CodeGen/CGObjCRuntime.h
index 3bd981256f475..72997bf6348ae 100644
--- a/clang/lib/CodeGen/CGObjCRuntime.h
+++ b/clang/lib/CodeGen/CGObjCRuntime.h
@@ -23,40 +23,40 @@
#include "llvm/ADT/UniqueVector.h"
namespace llvm {
- class Constant;
- class Function;
- class Module;
- class StructLayout;
- class StructType;
- class Type;
- class Value;
-}
+class Constant;
+class Function;
+class Module;
+class StructLayout;
+class StructType;
+class Type;
+class Value;
+} // namespace llvm
namespace clang {
namespace CodeGen {
class CGFunctionInfo;
class CodeGenFunction;
-}
-
- class FieldDecl;
- class ObjCAtTryStmt;
- class ObjCAtThrowStmt;
- class ObjCAtSynchronizedStmt;
- class ObjCContainerDecl;
- class ObjCCategoryImplDecl;
- class ObjCImplementationDecl;
- class ObjCInterfaceDecl;
- class ObjCMessageExpr;
- class ObjCMethodDecl;
- class ObjCProtocolDecl;
- class Selector;
- class ObjCIvarDecl;
- class ObjCStringLiteral;
- class BlockDeclRefExpr;
+} // namespace CodeGen
+
+class FieldDecl;
+class ObjCAtTryStmt;
+class ObjCAtThrowStmt;
+class ObjCAtSynchronizedStmt;
+class ObjCContainerDecl;
+class ObjCCategoryImplDecl;
+class ObjCImplementationDecl;
+class ObjCInterfaceDecl;
+class ObjCMessageExpr;
+class ObjCMethodDecl;
+class ObjCProtocolDecl;
+class Selector;
+class ObjCIvarDecl;
+class ObjCStringLiteral;
+class BlockDeclRefExpr;
namespace CodeGen {
- class CodeGenModule;
- class CGBlockInfo;
+class CodeGenModule;
+class CGBlockInfo;
// FIXME: Several methods should be pure virtual but aren't to avoid the
// partially-implemented subclass breaking.
@@ -88,8 +88,7 @@ class CGObjCRuntime {
const ObjCInterfaceDecl *OID,
llvm::Value *BaseValue,
const ObjCIvarDecl *Ivar,
- unsigned CVRQualifiers,
- llvm::Value *Offset);
+ unsigned CVRQualifiers, llvm::Value *Offset);
/// Emits a try / catch statement. This function is intended to be called by
/// subclasses, and provides a generic mechanism for generating these, which
/// should be usable by all runtimes. The caller must provide the functions
@@ -145,7 +144,7 @@ class CGObjCRuntime {
/// error to Sema.
virtual llvm::Constant *GetEHType(QualType T) = 0;
- virtual CatchTypeInfo getCatchAllTypeInfo() { return { nullptr, 0 }; }
+ virtual CatchTypeInfo getCatchAllTypeInfo() { return {nullptr, 0}; }
/// Generate a constant string object.
virtual ConstantAddress GenerateConstantString(const StringLiteral *) = 0;
@@ -165,11 +164,8 @@ class CGObjCRuntime {
/// \param Method - The method being called, this may be null if synthesizing
/// a property setter or getter.
virtual CodeGen::RValue
- GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot ReturnSlot,
- QualType ResultType,
- Selector Sel,
- llvm::Value *Receiver,
+ GenerateMessageSend(CodeGen::CodeGenFunction &CGF, ReturnValueSlot ReturnSlot,
+ QualType ResultType, Selector Sel, llvm::Value *Receiver,
const CallArgList &CallArgs,
const ObjCInterfaceDecl *Class = nullptr,
const ObjCMethodDecl *Method = nullptr) = 0;
@@ -178,16 +174,11 @@ class CGObjCRuntime {
///
/// This variant allows for the call to be substituted with an optimized
/// variant.
- CodeGen::RValue
- GeneratePossiblySpecializedMessageSend(CodeGenFunction &CGF,
- ReturnValueSlot Return,
- QualType ResultType,
- Selector Sel,
- llvm::Value *Receiver,
- const CallArgList& Args,
- const ObjCInterfaceDecl *OID,
- const ObjCMethodDecl *Method,
- bool isClassMessage);
+ CodeGen::RValue GeneratePossiblySpecializedMessageSend(
+ CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
+ Selector Sel, llvm::Value *Receiver, const CallArgList &Args,
+ const ObjCInterfaceDecl *OID, const ObjCMethodDecl *Method,
+ bool isClassMessage);
/// Generate an Objective-C message send operation to the super
/// class initiated in a method for Class and with the given Self
@@ -195,17 +186,11 @@ class CGObjCRuntime {
///
/// \param Method - The method being called, this may be null if synthesizing
/// a property setter or getter.
- virtual CodeGen::RValue
- GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
- ReturnValueSlot ReturnSlot,
- QualType ResultType,
- Selector Sel,
- const ObjCInterfaceDecl *Class,
- bool isCategoryImpl,
- llvm::Value *Self,
- bool IsClassMessage,
- const CallArgList &CallArgs,
- const ObjCMethodDecl *Method = nullptr) = 0;
+ virtual CodeGen::RValue GenerateMessageSendSuper(
+ CodeGen::CodeGenFunction &CGF, ReturnValueSlot ReturnSlot,
+ QualType ResultType, Selector Sel, const ObjCInterfaceDecl *Class,
+ bool isCategoryImpl, llvm::Value *Self, bool IsClassMessage,
+ const CallArgList &CallArgs, const ObjCMethodDecl *Method = nullptr) = 0;
/// Walk the list of protocol references from a class, category or
/// protocol to traverse the DAG formed from it's inheritance hierarchy. Find
@@ -272,7 +257,6 @@ class CGObjCRuntime {
virtual llvm::Value *GetClass(CodeGenFunction &CGF,
const ObjCInterfaceDecl *OID) = 0;
-
virtual llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
llvm_unreachable("autoreleasepool unsupported in this ABI");
}
@@ -287,14 +271,14 @@ class CGObjCRuntime {
const ObjCAtTryStmt &S) = 0;
virtual void EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
const ObjCAtThrowStmt &S,
- bool ClearInsertionPoint=true) = 0;
+ bool ClearInsertionPoint = true) = 0;
virtual llvm::Value *EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
Address AddrWeakObj) = 0;
virtual void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dest) = 0;
virtual void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dest,
- bool threadlocal=false) = 0;
+ bool threadlocal = false) = 0;
virtual void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dest,
llvm::Value *ivarOffset) = 0;
@@ -302,21 +286,21 @@ class CGObjCRuntime {
llvm::Value *src, Address dest) = 0;
virtual LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
- QualType ObjectTy,
- llvm::Value *BaseValue,
+ QualType ObjectTy, llvm::Value *BaseValue,
const ObjCIvarDecl *Ivar,
unsigned CVRQualifiers) = 0;
virtual llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
const ObjCInterfaceDecl *Interface,
const ObjCIvarDecl *Ivar) = 0;
virtual void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
- Address DestPtr,
- Address SrcPtr,
+ Address DestPtr, Address SrcPtr,
llvm::Value *Size) = 0;
- virtual llvm::Constant *BuildGCBlockLayout(CodeGen::CodeGenModule &CGM,
- const CodeGen::CGBlockInfo &blockInfo) = 0;
- virtual llvm::Constant *BuildRCBlockLayout(CodeGen::CodeGenModule &CGM,
- const CodeGen::CGBlockInfo &blockInfo) = 0;
+ virtual llvm::Constant *
+ BuildGCBlockLayout(CodeGen::CodeGenModule &CGM,
+ const CodeGen::CGBlockInfo &blockInfo) = 0;
+ virtual llvm::Constant *
+ BuildRCBlockLayout(CodeGen::CodeGenModule &CGM,
+ const CodeGen::CGBlockInfo &blockInfo) = 0;
virtual std::string getRCBlockLayoutStr(CodeGen::CodeGenModule &CGM,
const CGBlockInfo &blockInfo) {
return {};
@@ -332,15 +316,14 @@ class CGObjCRuntime {
MessageSendInfo(const CGFunctionInfo &callInfo,
llvm::PointerType *messengerType)
- : CallInfo(callInfo), MessengerType(messengerType) {}
+ : CallInfo(callInfo), MessengerType(messengerType) {}
};
MessageSendInfo getMessageSendInfo(const ObjCMethodDecl *method,
QualType resultType,
CallArgList &callArgs);
bool canMessageReceiverBeNull(CodeGenFunction &CGF,
- const ObjCMethodDecl *method,
- bool isSuper,
+ const ObjCMethodDecl *method, bool isSuper,
const ObjCInterfaceDecl *classReceiver,
llvm::Value *receiver);
static bool isWeakLinkedClass(const ObjCInterfaceDecl *cls);
@@ -364,9 +347,9 @@ class CGObjCRuntime {
};
/// Creates an instance of an Objective-C runtime class.
-//TODO: This should include some way of selecting which runtime to target.
+// TODO: This should include some way of selecting which runtime to target.
CGObjCRuntime *CreateGNUObjCRuntime(CodeGenModule &CGM);
CGObjCRuntime *CreateMacObjCRuntime(CodeGenModule &CGM);
-}
-}
+} // namespace CodeGen
+} // namespace clang
#endif
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h
index ced3484fbd2b6..5c1ff76f2c63a 100644
--- a/clang/lib/CodeGen/CodeGenFunction.h
+++ b/clang/lib/CodeGen/CodeGenFunction.h
@@ -54,7 +54,7 @@ class SwitchInst;
class Twine;
class Value;
class CanonicalLoopInfo;
-}
+} // namespace llvm
namespace clang {
class ASTContext;
@@ -107,11 +107,7 @@ struct CGCoroData;
/// CGExprAgg?
///
/// TODO: should vectors maybe be split out into their own thing?
-enum TypeEvaluationKind {
- TEK_Scalar,
- TEK_Complex,
- TEK_Aggregate
-};
+enum TypeEvaluationKind { TEK_Scalar, TEK_Complex, TEK_Aggregate };
#define LIST_SANITIZER_CHECKS \
SANITIZER_CHECK(AddOverflow, add_overflow, 0) \
@@ -150,7 +146,7 @@ enum SanitizerHandler {
/// Helper class with most of the code for saving a value for a
/// conditional expression cleanup.
struct DominatingLLVMValue {
- typedef llvm::PointerIntPair<llvm::Value*, 1, bool> saved_type;
+ typedef llvm::PointerIntPair<llvm::Value *, 1, bool> saved_type;
/// Answer whether the given value needs extra work to be saved.
static bool needsSaving(llvm::Value *value) {
@@ -158,7 +154,8 @@ struct DominatingLLVMValue {
return false;
// If it's not an instruction, we don't need to save.
- if (!isa<llvm::Instruction>(value)) return false;
+ if (!isa<llvm::Instruction>(value))
+ return false;
// If it's an instruction in the entry block, we don't need to save.
llvm::BasicBlock *block = cast<llvm::Instruction>(value)->getParent();
@@ -171,10 +168,10 @@ struct DominatingLLVMValue {
/// A partial specialization of DominatingValue for llvm::Values that
/// might be llvm::Instructions.
-template <class T> struct DominatingPointer<T,true> : DominatingLLVMValue {
+template <class T> struct DominatingPointer<T, true> : DominatingLLVMValue {
typedef T *type;
static type restore(CodeGenFunction &CGF, saved_type value) {
- return static_cast<T*>(DominatingLLVMValue::restore(CGF, value));
+ return static_cast<T *>(DominatingLLVMValue::restore(CGF, value));
}
};
@@ -212,8 +209,13 @@ template <> struct DominatingValue<Address> {
template <> struct DominatingValue<RValue> {
typedef RValue type;
class saved_type {
- enum Kind { ScalarLiteral, ScalarAddress, AggregateLiteral,
- AggregateAddress, ComplexAddress };
+ enum Kind {
+ ScalarLiteral,
+ ScalarAddress,
+ AggregateLiteral,
+ AggregateAddress,
+ ComplexAddress
+ };
union {
struct {
DominatingLLVMValue::saved_type first, second;
@@ -241,9 +243,7 @@ template <> struct DominatingValue<RValue> {
// implementations in CGCleanup.cpp
};
- static bool needsSaving(type value) {
- return saved_type::needsSaving(value);
- }
+ static bool needsSaving(type value) { return saved_type::needsSaving(value); }
static saved_type save(CodeGenFunction &CGF, type value) {
return saved_type::save(CGF, value);
}
@@ -259,6 +259,7 @@ class CodeGenFunction : public CodeGenTypeCache {
void operator=(const CodeGenFunction &) = delete;
friend class CGCXXABI;
+
public:
/// A jump destination is an abstract label, branching to which may
/// require a jump out through normal cleanups.
@@ -284,7 +285,7 @@ class CodeGenFunction : public CodeGenTypeCache {
unsigned Index;
};
- CodeGenModule &CGM; // Per-module state.
+ CodeGenModule &CGM; // Per-module state.
const TargetInfo &Target;
// For EH/SEH outlined funclets, this field points to parent's CGF
@@ -369,9 +370,7 @@ class CodeGenFunction : public CodeGenTypeCache {
};
CGCoroInfo CurCoro;
- bool isCoroutine() const {
- return CurCoro.Data != nullptr;
- }
+ bool isCoroutine() const { return CurCoro.Data != nullptr; }
bool inSuspendBlock() const {
return isCoroutine() && CurCoro.InSuspendBlock;
@@ -464,10 +463,10 @@ class CodeGenFunction : public CodeGenTypeCache {
: Kind(K), ThisValue(nullptr), CXXThisFieldDecl(nullptr) {}
explicit CGCapturedStmtInfo(const CapturedStmt &S,
CapturedRegionKind K = CR_Default)
- : Kind(K), ThisValue(nullptr), CXXThisFieldDecl(nullptr) {
+ : Kind(K), ThisValue(nullptr), CXXThisFieldDecl(nullptr) {
RecordDecl::field_iterator Field =
- S.getCapturedRecordDecl()->field_begin();
+ S.getCapturedRecordDecl()->field_begin();
for (CapturedStmt::const_capture_iterator I = S.capture_begin(),
E = S.capture_end();
I != E; ++I, ++Field) {
@@ -496,9 +495,7 @@ class CodeGenFunction : public CodeGenTypeCache {
bool isCXXThisExprCaptured() const { return getThisFieldDecl() != nullptr; }
virtual FieldDecl *getThisFieldDecl() const { return CXXThisFieldDecl; }
- static bool classof(const CGCapturedStmtInfo *) {
- return true;
- }
+ static bool classof(const CGCapturedStmtInfo *) { return true; }
/// Emit the captured statement body.
virtual void EmitBody(CodeGenFunction &CGF, const Stmt *S) {
@@ -535,6 +532,7 @@ class CodeGenFunction : public CodeGenTypeCache {
private:
CodeGenFunction &CGF;
CGCapturedStmtInfo *PrevCapturedStmtInfo;
+
public:
CGCapturedStmtRAII(CodeGenFunction &CGF,
CGCapturedStmtInfo *NewCapturedStmtInfo)
@@ -578,6 +576,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// RAII object to set/unset CodeGenFunction::IsSanitizerScope.
class SanitizerScope {
CodeGenFunction *CGF;
+
public:
SanitizerScope(CodeGenFunction *CGF);
~SanitizerScope();
@@ -832,7 +831,7 @@ class CodeGenFunction : public CodeGenTypeCache {
public:
/// ObjCEHValueStack - Stack of Objective-C exception values, used for
/// rethrows.
- SmallVector<llvm::Value*, 8> ObjCEHValueStack;
+ SmallVector<llvm::Value *, 8> ObjCEHValueStack;
/// A class controlling the emission of a finally block.
class FinallyInfo {
@@ -900,7 +899,8 @@ class CodeGenFunction : public CodeGenTypeCache {
SavedTuple Saved{saveValueInCond(A)...};
typedef EHScopeStack::ConditionalCleanup<T, As...> CleanupType;
- pushCleanupAfterFullExprWithActiveFlag<CleanupType>(Kind, ActiveFlag, Saved);
+ pushCleanupAfterFullExprWithActiveFlag<CleanupType>(Kind, ActiveFlag,
+ Saved);
}
template <class T, class... As>
@@ -990,15 +990,16 @@ class CodeGenFunction : public CodeGenTypeCache {
size_t LifetimeExtendedCleanupStackSize;
CleanupDeactivationScope DeactivateCleanups;
bool OldDidCallStackSave;
+
protected:
bool PerformCleanup;
- private:
+ private:
RunCleanupsScope(const RunCleanupsScope &) = delete;
void operator=(const RunCleanupsScope &) = delete;
protected:
- CodeGenFunction& CGF;
+ CodeGenFunction &CGF;
public:
/// Enter a new cleanup scope.
@@ -1030,7 +1031,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// the insertion point after cleanup emission. If cleanup emission created
/// a shared cleanup block, these value pointers will be rewritten.
/// Otherwise, they not will be modified.
- void ForceCleanup(std::initializer_list<llvm::Value**> ValuesToReload = {}) {
+ void
+ ForceCleanup(std::initializer_list<llvm::Value **> ValuesToReload = {}) {
assert(PerformCleanup && "Already forced cleanup");
CGF.DidCallStackSave = OldDidCallStackSave;
DeactivateCleanups.ForceDeactivate();
@@ -1047,7 +1049,7 @@ class CodeGenFunction : public CodeGenTypeCache {
class LexicalScope : public RunCleanupsScope {
SourceRange Range;
- SmallVector<const LabelDecl*, 4> Labels;
+ SmallVector<const LabelDecl *, 4> Labels;
LexicalScope *ParentScope;
LexicalScope(const LexicalScope &) = delete;
@@ -1056,7 +1058,8 @@ class CodeGenFunction : public CodeGenTypeCache {
public:
/// Enter a new cleanup scope.
explicit LexicalScope(CodeGenFunction &CGF, SourceRange Range)
- : RunCleanupsScope(CGF), Range(Range), ParentScope(CGF.CurLexicalScope) {
+ : RunCleanupsScope(CGF), Range(Range),
+ ParentScope(CGF.CurLexicalScope) {
CGF.CurLexicalScope = this;
if (CGDebugInfo *DI = CGF.getDebugInfo())
DI->EmitLexicalBlockStart(CGF.Builder, Range.getBegin());
@@ -1091,9 +1094,7 @@ class CodeGenFunction : public CodeGenTypeCache {
rescopeLabels();
}
- bool hasLabels() const {
- return !Labels.empty();
- }
+ bool hasLabels() const { return !Labels.empty(); }
void rescopeLabels();
};
@@ -1120,7 +1121,8 @@ class CodeGenFunction : public CodeGenTypeCache {
Address TempAddr) {
LocalVD = LocalVD->getCanonicalDecl();
// Only save it once.
- if (SavedLocals.count(LocalVD)) return false;
+ if (SavedLocals.count(LocalVD))
+ return false;
// Copy the existing local entry to SavedLocals.
auto it = CGF.LocalDeclMap.find(LocalVD);
@@ -1259,8 +1261,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// target of a potentially scope-crossing jump; get a stable handle
/// to which we can perform this jump later.
JumpDest getJumpDestInCurrentScope(llvm::BasicBlock *Target) {
- return JumpDest(Target,
- EHStack.getInnermostNormalCleanup(),
+ return JumpDest(Target, EHStack.getInnermostNormalCleanup(),
NextCleanupDestIndex++);
}
@@ -1297,7 +1298,7 @@ class CodeGenFunction : public CodeGenTypeCache {
public:
ConditionalEvaluation(CodeGenFunction &CGF)
- : StartBB(CGF.Builder.GetInsertBlock()) {}
+ : StartBB(CGF.Builder.GetInsertBlock()) {}
void begin(CodeGenFunction &CGF) {
assert(CGF.OutermostConditional != this);
@@ -1313,9 +1314,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Returns a block which will be executed prior to each
/// evaluation of the conditional code.
- llvm::BasicBlock *getStartingBlock() const {
- return StartBB;
- }
+ llvm::BasicBlock *getStartingBlock() const { return StartBB; }
};
/// isInConditionalBranch - Return true if we're currently emitting
@@ -1343,7 +1342,7 @@ class CodeGenFunction : public CodeGenTypeCache {
public:
StmtExprEvaluation(CodeGenFunction &CGF)
- : CGF(CGF), SavedOutermostConditional(CGF.OutermostConditional) {
+ : CGF(CGF), SavedOutermostConditional(CGF.OutermostConditional) {
CGF.OutermostConditional = nullptr;
}
@@ -1375,9 +1374,9 @@ class CodeGenFunction : public CodeGenTypeCache {
bool BoundLValue;
CodeGenFunction::PeepholeProtection Protection;
- OpaqueValueMappingData(const OpaqueValueExpr *ov,
- bool boundLValue)
- : OpaqueValue(ov), BoundLValue(boundLValue) {}
+ OpaqueValueMappingData(const OpaqueValueExpr *ov, bool boundLValue)
+ : OpaqueValue(ov), BoundLValue(boundLValue) {}
+
public:
OpaqueValueMappingData() : OpaqueValue(nullptr) {}
@@ -1387,30 +1386,26 @@ class CodeGenFunction : public CodeGenTypeCache {
// always keeps them in memory. Expressions of function type
// act exactly like l-values but are formally required to be
// r-values in C.
- return expr->isGLValue() ||
- expr->getType()->isFunctionType() ||
+ return expr->isGLValue() || expr->getType()->isFunctionType() ||
hasAggregateEvaluationKind(expr->getType());
}
- static OpaqueValueMappingData bind(CodeGenFunction &CGF,
- const OpaqueValueExpr *ov,
- const Expr *e) {
+ static OpaqueValueMappingData
+ bind(CodeGenFunction &CGF, const OpaqueValueExpr *ov, const Expr *e) {
if (shouldBindAsLValue(ov))
return bind(CGF, ov, CGF.EmitLValue(e));
return bind(CGF, ov, CGF.EmitAnyExpr(e));
}
- static OpaqueValueMappingData bind(CodeGenFunction &CGF,
- const OpaqueValueExpr *ov,
- const LValue &lv) {
+ static OpaqueValueMappingData
+ bind(CodeGenFunction &CGF, const OpaqueValueExpr *ov, const LValue &lv) {
assert(shouldBindAsLValue(ov));
CGF.OpaqueLValues.insert(std::make_pair(ov, lv));
return OpaqueValueMappingData(ov, true);
}
- static OpaqueValueMappingData bind(CodeGenFunction &CGF,
- const OpaqueValueExpr *ov,
- const RValue &rv) {
+ static OpaqueValueMappingData
+ bind(CodeGenFunction &CGF, const OpaqueValueExpr *ov, const RValue &rv) {
assert(!shouldBindAsLValue(ov));
CGF.OpaqueRValues.insert(std::make_pair(ov, rv));
@@ -1455,7 +1450,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// helpful.
///
OpaqueValueMapping(CodeGenFunction &CGF,
- const AbstractConditionalOperator *op) : CGF(CGF) {
+ const AbstractConditionalOperator *op)
+ : CGF(CGF) {
if (isa<ConditionalOperator>(op))
// Leave Data empty.
return;
@@ -1476,17 +1472,15 @@ class CodeGenFunction : public CodeGenTypeCache {
}
}
- OpaqueValueMapping(CodeGenFunction &CGF,
- const OpaqueValueExpr *opaqueValue,
+ OpaqueValueMapping(CodeGenFunction &CGF, const OpaqueValueExpr *opaqueValue,
LValue lvalue)
- : CGF(CGF), Data(OpaqueValueMappingData::bind(CGF, opaqueValue, lvalue)) {
- }
+ : CGF(CGF),
+ Data(OpaqueValueMappingData::bind(CGF, opaqueValue, lvalue)) {}
- OpaqueValueMapping(CodeGenFunction &CGF,
- const OpaqueValueExpr *opaqueValue,
+ OpaqueValueMapping(CodeGenFunction &CGF, const OpaqueValueExpr *opaqueValue,
RValue rvalue)
- : CGF(CGF), Data(OpaqueValueMappingData::bind(CGF, opaqueValue, rvalue)) {
- }
+ : CGF(CGF),
+ Data(OpaqueValueMappingData::bind(CGF, opaqueValue, rvalue)) {}
void pop() {
Data.unbind(CGF);
@@ -1494,7 +1488,8 @@ class CodeGenFunction : public CodeGenTypeCache {
}
~OpaqueValueMapping() {
- if (Data.isValid()) Data.unbind(CGF);
+ if (Data.isValid())
+ Data.unbind(CGF);
}
};
@@ -1534,13 +1529,13 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::DenseMap<llvm::AllocaInst *, int> EscapedLocals;
/// LabelMap - This keeps track of the LLVM basic block for each C label.
- llvm::DenseMap<const LabelDecl*, JumpDest> LabelMap;
+ llvm::DenseMap<const LabelDecl *, JumpDest> LabelMap;
// BreakContinueStack - This keeps track of where break and continue
// statements should jump to.
struct BreakContinue {
BreakContinue(JumpDest Break, JumpDest Continue)
- : BreakBlock(Break), ContinueBlock(Continue) {}
+ : BreakBlock(Break), ContinueBlock(Continue) {}
JumpDest BreakBlock;
JumpDest ContinueBlock;
@@ -1716,12 +1711,9 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Get the profiler's current count. This is generally the count for the most
/// recently incremented counter.
- uint64_t getCurrentProfileCount() {
- return PGO.getCurrentRegionCount();
- }
+ uint64_t getCurrentProfileCount() { return PGO.getCurrentRegionCount(); }
private:
-
/// SwitchInsn - This is nearest current switch instruction. It is null if
/// current context is not in a switch.
llvm::SwitchInst *SwitchInsn = nullptr;
@@ -1746,7 +1738,7 @@ class CodeGenFunction : public CodeGenTypeCache {
// multiple VLA types can share the same size expression.
// FIXME: Maybe this could be a stack of maps that is pushed/popped as we
// enter/leave scopes.
- llvm::DenseMap<const Expr*, llvm::Value*> VLASizeMap;
+ llvm::DenseMap<const Expr *, llvm::Value *> VLASizeMap;
/// A block containing a single 'unreachable' instruction. Created
/// lazily by getUnreachableBlock().
@@ -1788,7 +1780,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// The scope of a CXXDefaultInitExpr. Within this scope, the value of 'this'
/// is overridden to be the object under construction.
- class CXXDefaultInitExprScope {
+ class CXXDefaultInitExprScope {
public:
CXXDefaultInitExprScope(CodeGenFunction &CGF, const CXXDefaultInitExpr *E)
: CGF(CGF), OldCXXThisValue(CGF.CXXThisValue),
@@ -1819,12 +1811,10 @@ class CodeGenFunction : public CodeGenTypeCache {
class ArrayInitLoopExprScope {
public:
ArrayInitLoopExprScope(CodeGenFunction &CGF, llvm::Value *Index)
- : CGF(CGF), OldArrayInitIndex(CGF.ArrayInitIndex) {
+ : CGF(CGF), OldArrayInitIndex(CGF.ArrayInitIndex) {
CGF.ArrayInitIndex = Index;
}
- ~ArrayInitLoopExprScope() {
- CGF.ArrayInitIndex = OldArrayInitIndex;
- }
+ ~ArrayInitLoopExprScope() { CGF.ArrayInitIndex = OldArrayInitIndex; }
private:
CodeGenFunction &CGF;
@@ -2151,7 +2141,7 @@ class CodeGenFunction : public CodeGenTypeCache {
void EmitKernelMetadata(const FunctionDecl *FD, llvm::Function *Fn);
public:
- CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext=false);
+ CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext = false);
~CodeGenFunction();
CodeGenTypes &getTypes() const { return CGM.getTypes(); }
@@ -2191,7 +2181,8 @@ class CodeGenFunction : public CodeGenTypeCache {
}
llvm::BasicBlock *getInvokeDest() {
- if (!EHStack.requiresLandingPad()) return nullptr;
+ if (!EHStack.requiresLandingPad())
+ return nullptr;
return getInvokeDestImpl();
}
@@ -2220,10 +2211,10 @@ class CodeGenFunction : public CodeGenTypeCache {
CharUnits elementAlignment,
Destroyer *destroyer);
- void pushDestroy(QualType::DestructionKind dtorKind,
- Address addr, QualType type);
- void pushEHDestroy(QualType::DestructionKind dtorKind,
- Address addr, QualType type);
+ void pushDestroy(QualType::DestructionKind dtorKind, Address addr,
+ QualType type);
+ void pushEHDestroy(QualType::DestructionKind dtorKind, Address addr,
+ QualType type);
void pushDestroy(CleanupKind kind, Address addr, QualType type,
Destroyer *destroyer, bool useEHCleanupForArray);
void pushDestroyAndDeferDeactivation(QualType::DestructionKind dtorKind,
@@ -2248,8 +2239,8 @@ class CodeGenFunction : public CodeGenTypeCache {
const VarDecl *VD);
void emitArrayDestroy(llvm::Value *begin, llvm::Value *end,
QualType elementType, CharUnits elementAlign,
- Destroyer *destroyer,
- bool checkZeroLength, bool useEHCleanup);
+ Destroyer *destroyer, bool checkZeroLength,
+ bool useEHCleanup);
Destroyer *getDestroyer(QualType::DestructionKind destructionKind);
@@ -2311,8 +2302,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// captured variables, etc.
llvm::Value *EmitBlockLiteral(const BlockExpr *);
- llvm::Function *GenerateBlockFunction(GlobalDecl GD,
- const CGBlockInfo &Info,
+ llvm::Function *GenerateBlockFunction(GlobalDecl GD, const CGBlockInfo &Info,
const DeclMapTy &ldm,
bool IsLambdaConversionToBlock,
bool BuildGlobalBlock);
@@ -2322,10 +2312,10 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::Constant *GenerateCopyHelperFunction(const CGBlockInfo &blockInfo);
llvm::Constant *GenerateDestroyHelperFunction(const CGBlockInfo &blockInfo);
- llvm::Constant *GenerateObjCAtomicSetterCopyHelperFunction(
- const ObjCPropertyImplDecl *PID);
- llvm::Constant *GenerateObjCAtomicGetterCopyHelperFunction(
- const ObjCPropertyImplDecl *PID);
+ llvm::Constant *
+ GenerateObjCAtomicSetterCopyHelperFunction(const ObjCPropertyImplDecl *PID);
+ llvm::Constant *
+ GenerateObjCAtomicGetterCopyHelperFunction(const ObjCPropertyImplDecl *PID);
llvm::Value *EmitBlockCopyAndAutorelease(llvm::Value *Block, QualType Ty);
void BuildBlockRelease(llvm::Value *DeclPtr, BlockFieldFlags flags,
@@ -2364,10 +2354,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// data in a variable which is declared as __block.
Address emitBlockByrefAddress(Address baseAddr, const VarDecl *V,
bool followForward = true);
- Address emitBlockByrefAddress(Address baseAddr,
- const BlockByrefInfo &info,
- bool followForward,
- const llvm::Twine &name);
+ Address emitBlockByrefAddress(Address baseAddr, const BlockByrefInfo &info,
+ bool followForward, const llvm::Twine &name);
const BlockByrefInfo &getBlockByrefInfo(const VarDecl *var);
@@ -2383,11 +2371,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Emit code for the start of a function.
/// \param Loc The location to be associated with the function.
/// \param StartLoc The location of the function body.
- void StartFunction(GlobalDecl GD,
- QualType RetTy,
- llvm::Function *Fn,
- const CGFunctionInfo &FnInfo,
- const FunctionArgList &Args,
+ void StartFunction(GlobalDecl GD, QualType RetTy, llvm::Function *Fn,
+ const CGFunctionInfo &FnInfo, const FunctionArgList &Args,
SourceLocation Loc = SourceLocation(),
SourceLocation StartLoc = SourceLocation());
@@ -2424,7 +2409,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// FinishFunction - Complete IR generation of the current function. It is
/// legal to call this function even if there is no current insertion point.
- void FinishFunction(SourceLocation EndLoc=SourceLocation());
+ void FinishFunction(SourceLocation EndLoc = SourceLocation());
void StartThunk(llvm::Function *Fn, GlobalDecl GD,
const CGFunctionInfo &FnInfo, bool IsUnprototyped);
@@ -2567,8 +2552,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// EmitFunctionProlog - Emit the target specific LLVM code to load the
/// arguments for the given function. This is also responsible for naming the
/// LLVM function arguments.
- void EmitFunctionProlog(const CGFunctionInfo &FI,
- llvm::Function *Fn,
+ void EmitFunctionProlog(const CGFunctionInfo &FI, llvm::Function *Fn,
const FunctionArgList &Args);
/// EmitFunctionEpilog - Emit the target specific LLVM code to return the
@@ -2647,7 +2631,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// IsFinished - If true, indicates that the caller has finished emitting
/// branches to the given block and does not expect to emit code into it. This
/// means the block can be ignored if it is unreachable.
- void EmitBlock(llvm::BasicBlock *BB, bool IsFinished=false);
+ void EmitBlock(llvm::BasicBlock *BB, bool IsFinished = false);
/// EmitBlockAfterUses - Emit the given block somewhere hopefully
/// near its uses, and leave the insertion point in it.
@@ -2665,9 +2649,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// HaveInsertPoint - True if an insertion point is defined. If not, this
/// indicates that the current code being emitted is unreachable.
- bool HaveInsertPoint() const {
- return Builder.GetInsertBlock() != nullptr;
- }
+ bool HaveInsertPoint() const { return Builder.GetInsertBlock() != nullptr; }
/// EnsureInsertPoint - Ensure that an insertion point is defined so that
/// emitted IR has a place to go. Note that by definition, if this function
@@ -2768,9 +2750,9 @@ class CodeGenFunction : public CodeGenTypeCache {
LValueBaseInfo *PointeeBaseInfo = nullptr,
TBAAAccessInfo *PointeeTBAAInfo = nullptr);
LValue EmitLoadOfReferenceLValue(LValue RefLVal);
- LValue EmitLoadOfReferenceLValue(Address RefAddr, QualType RefTy,
- AlignmentSource Source =
- AlignmentSource::Type) {
+ LValue
+ EmitLoadOfReferenceLValue(Address RefAddr, QualType RefTy,
+ AlignmentSource Source = AlignmentSource::Type) {
LValue RefLVal = MakeAddrLValue(RefAddr, RefTy, LValueBaseInfo(Source),
CGM.getTBAAAccessInfo(RefTy));
return EmitLoadOfReferenceLValue(RefLVal);
@@ -2914,7 +2896,8 @@ class CodeGenFunction : public CodeGenTypeCache {
const CGBitFieldInfo &Info,
SourceLocation Loc);
- /// EmitIgnoredExpr - Emit an expression in a context which ignores the result.
+ /// EmitIgnoredExpr - Emit an expression in a context which ignores the
+ /// result.
void EmitIgnoredExpr(const Expr *E);
/// EmitAnyExpr - Emit code to compute the specified expression which can have
@@ -2942,8 +2925,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// EmitAnyExprToMem - Emits the code necessary to evaluate an
/// arbitrary expression into the given memory location.
- void EmitAnyExprToMem(const Expr *E, Address Location,
- Qualifiers Quals, bool IsInitializer);
+ void EmitAnyExprToMem(const Expr *E, Address Location, Qualifiers Quals,
+ bool IsInitializer);
void EmitAnyExprToExn(const Expr *E, Address Addr);
@@ -3061,8 +3044,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// emitArrayLength - Compute the length of an array, even if it's a
/// VLA, and drill down to the base element type.
- llvm::Value *emitArrayLength(const ArrayType *arrayType,
- QualType &baseType,
+ llvm::Value *emitArrayLength(const ArrayType *arrayType, QualType &baseType,
Address &addr);
/// EmitVLASize - Capture all the sizes for the VLA expressions in
@@ -3109,24 +3091,21 @@ class CodeGenFunction : public CodeGenTypeCache {
/// GetAddressOfBaseOfCompleteClass - Convert the given pointer to a
/// complete class to the given direct base.
- Address
- GetAddressOfDirectBaseInCompleteClass(Address Value,
- const CXXRecordDecl *Derived,
- const CXXRecordDecl *Base,
- bool BaseIsVirtual);
+ Address GetAddressOfDirectBaseInCompleteClass(Address Value,
+ const CXXRecordDecl *Derived,
+ const CXXRecordDecl *Base,
+ bool BaseIsVirtual);
static bool ShouldNullCheckClassCastValue(const CastExpr *Cast);
/// GetAddressOfBaseClass - This function will add the necessary delta to the
/// load of 'this' and returns address of the base class.
- Address GetAddressOfBaseClass(Address Value,
- const CXXRecordDecl *Derived,
+ Address GetAddressOfBaseClass(Address Value, const CXXRecordDecl *Derived,
CastExpr::path_const_iterator PathBegin,
CastExpr::path_const_iterator PathEnd,
bool NullCheckValue, SourceLocation Loc);
- Address GetAddressOfDerivedClass(Address Value,
- const CXXRecordDecl *Derived,
+ Address GetAddressOfDerivedClass(Address Value, const CXXRecordDecl *Derived,
CastExpr::path_const_iterator PathBegin,
CastExpr::path_const_iterator PathEnd,
bool NullCheckValue);
@@ -3185,20 +3164,17 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Emit assumption that vptr load == global vtable.
void EmitVTableAssumptionLoad(const VPtr &vptr, Address This);
- void EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D,
- Address This, Address Src,
- const CXXConstructExpr *E);
+ void EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D, Address This,
+ Address Src, const CXXConstructExpr *E);
void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D,
- const ArrayType *ArrayTy,
- Address ArrayPtr,
+ const ArrayType *ArrayTy, Address ArrayPtr,
const CXXConstructExpr *E,
bool NewPointerIsChecked,
bool ZeroInitialization = false);
void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D,
- llvm::Value *NumElements,
- Address ArrayPtr,
+ llvm::Value *NumElements, Address ArrayPtr,
const CXXConstructExpr *E,
bool NewPointerIsChecked,
bool ZeroInitialization = false);
@@ -3342,7 +3318,6 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Get the record field index as represented in debug info.
unsigned getDebugInfoFIndex(const RecordDecl *Rec, unsigned FieldIndex);
-
//===--------------------------------------------------------------------===//
// Declaration Emission
//===--------------------------------------------------------------------===//
@@ -3426,9 +3401,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Returns the raw, allocated address, which is not necessarily
/// the address of the object itself. It is casted to default
/// address space for address space agnostic languages.
- Address getAllocatedAddress() const {
- return Addr;
- }
+ Address getAllocatedAddress() const { return Addr; }
/// Returns the address for the original alloca instruction.
RawAddress getOriginalAllocatedAddress() const { return AllocaAddr; }
@@ -3437,7 +3410,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Note that this does not chase the forwarding pointer for
/// __block decls.
Address getObjectAddress(CodeGenFunction &CGF) const {
- if (!IsEscapingByRef) return Addr;
+ if (!IsEscapingByRef)
+ return Addr;
return CGF.emitBlockByrefAddress(Addr, Variable, /*forward*/ false);
}
@@ -3453,8 +3427,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// QualTypes and size expression's debug node, so that CGDebugInfo can
/// reference this node when creating the DISubrange object to describe the
/// array types.
- void EmitAndRegisterVariableArrayDimensions(CGDebugInfo *DI,
- const VarDecl &D,
+ void EmitAndRegisterVariableArrayDimensions(CGDebugInfo *DI, const VarDecl &D,
bool EmitDebugInfo);
void EmitStaticVarDecl(const VarDecl &D,
@@ -3557,10 +3530,9 @@ class CodeGenFunction : public CodeGenTypeCache {
Address EmitCompoundStmt(const CompoundStmt &S, bool GetLast = false,
AggValueSlot AVS = AggValueSlot::ignored());
- Address EmitCompoundStmtWithoutScope(const CompoundStmt &S,
- bool GetLast = false,
- AggValueSlot AVS =
- AggValueSlot::ignored());
+ Address
+ EmitCompoundStmtWithoutScope(const CompoundStmt &S, bool GetLast = false,
+ AggValueSlot AVS = AggValueSlot::ignored());
/// EmitLabel - Emit the block for the given label. It is legal to call this
/// function even if there is no current insertion point.
@@ -3614,8 +3586,7 @@ class CodeGenFunction : public CodeGenTypeCache {
void VolatilizeTryBlocks(llvm::BasicBlock *BB,
llvm::SmallPtrSet<llvm::BasicBlock *, 10> &V);
- void pushSEHCleanup(CleanupKind kind,
- llvm::Function *FinallyFunc);
+ void pushSEHCleanup(CleanupKind kind, llvm::Function *FinallyFunc);
void startOutlinedSEHHelper(CodeGenFunction &ParentCGF, bool IsFilter,
const Stmt *OutlinedStmt);
@@ -3626,8 +3597,7 @@ class CodeGenFunction : public CodeGenTypeCache {
const SEHFinallyStmt &Finally);
void EmitSEHExceptionCodeSave(CodeGenFunction &ParentCGF,
- llvm::Value *ParentFP,
- llvm::Value *EntryEBP);
+ llvm::Value *ParentFP, llvm::Value *EntryEBP);
llvm::Value *EmitSEHExceptionCode();
llvm::Value *EmitSEHExceptionInfo();
llvm::Value *EmitSEHAbnormalTermination();
@@ -3647,8 +3617,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// outlined functions. ParentFP is the frame pointer of the outermost parent
/// frame.
Address recoverAddrOfEscapedLocal(CodeGenFunction &ParentCGF,
- Address ParentVar,
- llvm::Value *ParentFP);
+ Address ParentVar, llvm::Value *ParentFP);
void EmitCXXForRangeStmt(const CXXForRangeStmt &S,
ArrayRef<const Attr *> Attrs = {});
@@ -3701,8 +3670,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// the base array element).
/// \param Copy Actual copygin expression for copying data from \a SrcVD to \a
/// DestVD.
- void EmitOMPCopy(QualType OriginalType,
- Address DestAddr, Address SrcAddr,
+ void EmitOMPCopy(QualType OriginalType, Address DestAddr, Address SrcAddr,
const VarDecl *DestVD, const VarDecl *SrcVD,
const Expr *Copy);
/// Emit atomic update code for constructs: \a X = \a X \a BO \a E or
@@ -3828,10 +3796,8 @@ class CodeGenFunction : public CodeGenTypeCache {
void EmitOMPTargetTaskBasedDirective(const OMPExecutableDirective &S,
const RegionCodeGenTy &BodyGen,
OMPTargetDataInfo &InputInfo);
- void processInReduction(const OMPExecutableDirective &S,
- OMPTaskDataTy &Data,
- CodeGenFunction &CGF,
- const CapturedStmt *CS,
+ void processInReduction(const OMPExecutableDirective &S, OMPTaskDataTy &Data,
+ CodeGenFunction &CGF, const CapturedStmt *CS,
OMPPrivateScope &Scope);
void EmitOMPMetaDirective(const OMPMetaDirective &S);
void EmitOMPParallelDirective(const OMPParallelDirective &S);
@@ -4187,13 +4153,11 @@ class CodeGenFunction : public CodeGenTypeCache {
/// EmitUnsupportedRValue - Emit a dummy r-value using the type of E
/// and issue an ErrorUnsupported style diagnostic (using the
/// provided Name).
- RValue EmitUnsupportedRValue(const Expr *E,
- const char *Name);
+ RValue EmitUnsupportedRValue(const Expr *E, const char *Name);
/// EmitUnsupportedLValue - Emit a dummy l-value using the type of E and issue
/// an ErrorUnsupported style diagnostic (using the provided Name).
- LValue EmitUnsupportedLValue(const Expr *E,
- const char *Name);
+ LValue EmitUnsupportedLValue(const Expr *E, const char *Name);
/// EmitLValue - Emit code to compute a designator that specifies the location
/// of the expression.
@@ -4223,8 +4187,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// that the address will be used to access the object.
LValue EmitCheckedLValue(const Expr *E, TypeCheckKind TCK);
- RValue convertTempToRValue(Address addr, QualType type,
- SourceLocation Loc);
+ RValue convertTempToRValue(Address addr, QualType type, SourceLocation Loc);
void EmitAtomicInit(Expr *E, LValue lvalue);
@@ -4302,25 +4265,26 @@ class CodeGenFunction : public CodeGenTypeCache {
/// EmitStoreOfScalar - Store a scalar value to an address, taking
/// care to appropriately convert from the memory representation to
/// the LLVM value representation.
- void EmitStoreOfScalar(llvm::Value *Value, Address Addr,
- bool Volatile, QualType Ty,
+ void EmitStoreOfScalar(llvm::Value *Value, Address Addr, bool Volatile,
+ QualType Ty,
AlignmentSource Source = AlignmentSource::Type,
bool isInit = false, bool isNontemporal = false) {
EmitStoreOfScalar(Value, Addr, Volatile, Ty, LValueBaseInfo(Source),
CGM.getTBAAAccessInfo(Ty), isInit, isNontemporal);
}
- void EmitStoreOfScalar(llvm::Value *Value, Address Addr,
- bool Volatile, QualType Ty,
- LValueBaseInfo BaseInfo, TBAAAccessInfo TBAAInfo,
- bool isInit = false, bool isNontemporal = false);
+ void EmitStoreOfScalar(llvm::Value *Value, Address Addr, bool Volatile,
+ QualType Ty, LValueBaseInfo BaseInfo,
+ TBAAAccessInfo TBAAInfo, bool isInit = false,
+ bool isNontemporal = false);
/// EmitStoreOfScalar - Store a scalar value to an address, taking
/// care to appropriately convert from the memory representation to
/// the LLVM value representation. The l-value must be a simple
/// l-value. The isInit flag indicates whether this is an initialization.
/// If so, atomic qualifiers are ignored and the store is always non-atomic.
- void EmitStoreOfScalar(llvm::Value *value, LValue lvalue, bool isInit=false);
+ void EmitStoreOfScalar(llvm::Value *value, LValue lvalue,
+ bool isInit = false);
/// EmitLoadOfLValue - Given an expression that represents a value lvalue,
/// this method emits the address of the lvalue, then loads the result as an
@@ -4349,7 +4313,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// bit-field contents after the store, appropriate for use as the result of
/// an assignment to the bit-field.
void EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst,
- llvm::Value **Result=nullptr);
+ llvm::Value **Result = nullptr);
/// Emit an l-value for an assignment (simple or compound) of complex type.
LValue EmitComplexAssignmentLValue(const BinaryOperator *E);
@@ -4402,9 +4366,10 @@ class CodeGenFunction : public CodeGenTypeCache {
TBAAAccessInfo *TBAAInfo = nullptr);
class ConstantEmission {
- llvm::PointerIntPair<llvm::Constant*, 1, bool> ValueAndIsReference;
+ llvm::PointerIntPair<llvm::Constant *, 1, bool> ValueAndIsReference;
ConstantEmission(llvm::Constant *C, bool isReference)
- : ValueAndIsReference(C, isReference) {}
+ : ValueAndIsReference(C, isReference) {}
+
public:
ConstantEmission() {}
static ConstantEmission forReference(llvm::Constant *C) {
@@ -4443,7 +4408,7 @@ class CodeGenFunction : public CodeGenTypeCache {
const ObjCIvarDecl *Ivar);
llvm::Value *EmitIvarOffsetAsPointerDiff(const ObjCInterfaceDecl *Interface,
const ObjCIvarDecl *Ivar);
- LValue EmitLValueForField(LValue Base, const FieldDecl* Field);
+ LValue EmitLValueForField(LValue Base, const FieldDecl *Field);
LValue EmitLValueForLambdaField(const FieldDecl *Field);
LValue EmitLValueForLambdaField(const FieldDecl *Field,
llvm::Value *ThisValue);
@@ -4451,12 +4416,10 @@ class CodeGenFunction : public CodeGenTypeCache {
/// EmitLValueForFieldInitialization - Like EmitLValueForField, except that
/// if the Field is a reference, this will return the address of the reference
/// and not the address of the value stored in the reference.
- LValue EmitLValueForFieldInitialization(LValue Base,
- const FieldDecl* Field);
+ LValue EmitLValueForFieldInitialization(LValue Base, const FieldDecl *Field);
- LValue EmitLValueForIvar(QualType ObjectTy,
- llvm::Value* Base, const ObjCIvarDecl *Ivar,
- unsigned CVRQualifiers);
+ LValue EmitLValueForIvar(QualType ObjectTy, llvm::Value *Base,
+ const ObjCIvarDecl *Ivar, unsigned CVRQualifiers);
LValue EmitCXXConstructLValue(const CXXConstructExpr *E);
LValue EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E);
@@ -4468,7 +4431,7 @@ class CodeGenFunction : public CodeGenTypeCache {
LValue EmitStmtExprLValue(const StmtExpr *E);
LValue EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E);
LValue EmitObjCSelectorLValue(const ObjCSelectorExpr *E);
- void EmitDeclRefExprDbgValue(const DeclRefExpr *E, const APValue &Init);
+ void EmitDeclRefExprDbgValue(const DeclRefExpr *E, const APValue &Init);
//===--------------------------------------------------------------------===//
// Scalar Expression Emission
@@ -4535,8 +4498,7 @@ class CodeGenFunction : public CodeGenTypeCache {
ArrayRef<llvm::Value *> args);
CGCallee BuildAppleKextVirtualCall(const CXXMethodDecl *MD,
- NestedNameSpecifier *Qual,
- llvm::Type *Ty);
+ NestedNameSpecifier *Qual, llvm::Type *Ty);
CGCallee BuildAppleKextVirtualDestructorCall(const CXXDestructorDecl *DD,
CXXDtorType Type,
@@ -4622,11 +4584,10 @@ class CodeGenFunction : public CodeGenTypeCache {
bool HasQualifier, NestedNameSpecifier *Qualifier, bool IsArrow,
const Expr *Base, llvm::CallBase **CallOrInvoke);
// Compute the object pointer.
- Address EmitCXXMemberDataPointerAddress(const Expr *E, Address base,
- llvm::Value *memberPtr,
- const MemberPointerType *memberPtrType,
- LValueBaseInfo *BaseInfo = nullptr,
- TBAAAccessInfo *TBAAInfo = nullptr);
+ Address EmitCXXMemberDataPointerAddress(
+ const Expr *E, Address base, llvm::Value *memberPtr,
+ const MemberPointerType *memberPtrType,
+ LValueBaseInfo *BaseInfo = nullptr, TBAAAccessInfo *TBAAInfo = nullptr);
RValue EmitCXXMemberPointerCallExpr(const CXXMemberCallExpr *E,
ReturnValueSlot ReturnValue,
llvm::CallBase **CallOrInvoke);
@@ -4687,22 +4648,18 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::Value *EmitCMSEClearRecord(llvm::Value *V, llvm::ArrayType *ATy,
QualType RTy);
- llvm::Value *EmitCommonNeonBuiltinExpr(unsigned BuiltinID,
- unsigned LLVMIntrinsic,
- unsigned AltLLVMIntrinsic,
- const char *NameHint,
- unsigned Modifier,
- const CallExpr *E,
- SmallVectorImpl<llvm::Value *> &Ops,
- Address PtrOp0, Address PtrOp1,
- llvm::Triple::ArchType Arch);
+ llvm::Value *
+ EmitCommonNeonBuiltinExpr(unsigned BuiltinID, unsigned LLVMIntrinsic,
+ unsigned AltLLVMIntrinsic, const char *NameHint,
+ unsigned Modifier, const CallExpr *E,
+ SmallVectorImpl<llvm::Value *> &Ops, Address PtrOp0,
+ Address PtrOp1, llvm::Triple::ArchType Arch);
llvm::Function *LookupNeonLLVMIntrinsic(unsigned IntrinsicID,
unsigned Modifier, llvm::Type *ArgTy,
const CallExpr *E);
llvm::Value *EmitNeonCall(llvm::Function *F,
- SmallVectorImpl<llvm::Value*> &O,
- const char *name,
+ SmallVectorImpl<llvm::Value *> &O, const char *name,
unsigned shift = 0, bool rightshift = false);
llvm::Value *EmitFP8NeonCall(unsigned IID, ArrayRef<llvm::Type *> Tys,
SmallVectorImpl<llvm::Value *> &O,
@@ -4806,7 +4763,7 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::Triple::ArchType Arch);
llvm::Value *EmitBPFBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
- llvm::Value *BuildVector(ArrayRef<llvm::Value*> Ops);
+ llvm::Value *BuildVector(ArrayRef<llvm::Value *> Ops);
llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
llvm::Value *EmitPPCBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
llvm::Value *EmitAMDGPUBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
@@ -4845,8 +4802,9 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::Value *EmitObjCBoxedExpr(const ObjCBoxedExpr *E);
llvm::Value *EmitObjCArrayLiteral(const ObjCArrayLiteral *E);
llvm::Value *EmitObjCDictionaryLiteral(const ObjCDictionaryLiteral *E);
- llvm::Value *EmitObjCCollectionLiteral(const Expr *E,
- const ObjCMethodDecl *MethodWithObjects);
+ llvm::Value *
+ EmitObjCCollectionLiteral(const Expr *E,
+ const ObjCMethodDecl *MethodWithObjects);
llvm::Value *EmitObjCSelectorExpr(const ObjCSelectorExpr *E);
RValue EmitObjCMessageExpr(const ObjCMessageExpr *E,
ReturnValueSlot Return = ReturnValueSlot());
@@ -4854,8 +4812,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Retrieves the default cleanup kind for an ARC cleanup.
/// Except under -fobjc-arc-eh, ARC cleanups are normal-only.
CleanupKind getARCCleanupKind() {
- return CGM.getCodeGenOpts().ObjCAutoRefCountExceptions
- ? NormalAndEHCleanup : NormalCleanup;
+ return CGM.getCodeGenOpts().ObjCAutoRefCountExceptions ? NormalAndEHCleanup
+ : NormalCleanup;
}
// ARC primitives.
@@ -4890,15 +4848,14 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::Type *returnType);
void EmitObjCRelease(llvm::Value *value, ARCPreciseLifetime_t precise);
- std::pair<LValue,llvm::Value*>
+ std::pair<LValue, llvm::Value *>
EmitARCStoreAutoreleasing(const BinaryOperator *e);
- std::pair<LValue,llvm::Value*>
- EmitARCStoreStrong(const BinaryOperator *e, bool ignored);
- std::pair<LValue,llvm::Value*>
+ std::pair<LValue, llvm::Value *> EmitARCStoreStrong(const BinaryOperator *e,
+ bool ignored);
+ std::pair<LValue, llvm::Value *>
EmitARCStoreUnsafeUnretained(const BinaryOperator *e, bool ignored);
- llvm::Value *EmitObjCAlloc(llvm::Value *value,
- llvm::Type *returnType);
+ llvm::Value *EmitObjCAlloc(llvm::Value *value, llvm::Type *returnType);
llvm::Value *EmitObjCAllocWithZone(llvm::Value *value,
llvm::Type *returnType);
llvm::Value *EmitObjCAllocInit(llvm::Value *value, llvm::Type *resultType);
@@ -4914,7 +4871,7 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::Value *EmitARCRetainAutoreleaseScalarExpr(const Expr *expr);
llvm::Value *EmitARCUnsafeUnretainedScalarExpr(const Expr *expr);
- void EmitARCIntrinsicUse(ArrayRef<llvm::Value*> values);
+ void EmitARCIntrinsicUse(ArrayRef<llvm::Value *> values);
void EmitARCNoopIntrinsicUse(ArrayRef<llvm::Value *> values);
@@ -4941,7 +4898,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// EmitScalarExpr - Emit the computation of the specified expression of LLVM
/// scalar type, returning the result.
- llvm::Value *EmitScalarExpr(const Expr *E , bool IgnoreResultAssign = false);
+ llvm::Value *EmitScalarExpr(const Expr *E, bool IgnoreResultAssign = false);
/// Emit a conversion from the specified type to the specified destination
/// type, both of which are LLVM scalar types.
@@ -4981,8 +4938,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// EmitComplexExpr - Emit the computation of the specified expression of
/// complex type, returning the result.
- ComplexPairTy EmitComplexExpr(const Expr *E,
- bool IgnoreReal = false,
+ ComplexPairTy EmitComplexExpr(const Expr *E, bool IgnoreReal = false,
bool IgnoreImag = false);
/// EmitComplexExprIntoLValue - Emit the given expression of complex
@@ -4998,7 +4954,8 @@ class CodeGenFunction : public CodeGenTypeCache {
ComplexPairTy EmitPromotedComplexExpr(const Expr *E, QualType PromotionType);
llvm::Value *EmitPromotedScalarExpr(const Expr *E, QualType PromotionType);
ComplexPairTy EmitPromotedValue(ComplexPairTy result, QualType PromotionType);
- ComplexPairTy EmitUnPromotedValue(ComplexPairTy result, QualType PromotionType);
+ ComplexPairTy EmitUnPromotedValue(ComplexPairTy result,
+ QualType PromotionType);
Address emitAddrOfRealComponent(Address complex, QualType complexType);
Address emitAddrOfImagComponent(Address complex, QualType complexType);
@@ -5007,9 +4964,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// global variable that has already been created for it. If the initializer
/// has a different type than GV does, this may free GV and return a different
/// one. Otherwise it just returns GV.
- llvm::GlobalVariable *
- AddInitializerToStaticVarDecl(const VarDecl &D,
- llvm::GlobalVariable *GV);
+ llvm::GlobalVariable *AddInitializerToStaticVarDecl(const VarDecl &D,
+ llvm::GlobalVariable *GV);
// Emit an @llvm.invariant.start call for the given memory region.
void EmitInvariantStart(llvm::Constant *Addr, CharUnits Size);
@@ -5056,8 +5012,8 @@ class CodeGenFunction : public CodeGenTypeCache {
/// Emit a branch to select whether or not to perform guarded initialization.
void EmitCXXGuardedInitBranch(llvm::Value *NeedsInit,
llvm::BasicBlock *InitBlock,
- llvm::BasicBlock *NoInitBlock,
- GuardKind Kind, const VarDecl *D);
+ llvm::BasicBlock *NoInitBlock, GuardKind Kind,
+ const VarDecl *D);
/// GenerateCXXGlobalInitFunc - Generates code for initializing global
/// variables.
@@ -5074,8 +5030,7 @@ class CodeGenFunction : public CodeGenTypeCache {
llvm::Constant *>>
DtorsOrStermFinalizers);
- void GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn,
- const VarDecl *D,
+ void GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn, const VarDecl *D,
llvm::GlobalVariable *Addr,
bool PerformInit);
@@ -5180,8 +5135,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// is a subtraction.
llvm::Value *EmitCheckedInBoundsGEP(llvm::Type *ElemTy, llvm::Value *Ptr,
ArrayRef<llvm::Value *> IdxList,
- bool SignedIndices,
- bool IsSubtraction,
+ bool SignedIndices, bool IsSubtraction,
SourceLocation Loc,
const Twine &Name = "");
@@ -5364,8 +5318,7 @@ class CodeGenFunction : public CodeGenTypeCache {
/// if E is a parameter with the pass_object_size attribute.
llvm::Value *emitBuiltinObjectSize(const Expr *E, unsigned Type,
llvm::IntegerType *ResType,
- llvm::Value *EmittedE,
- bool IsDynamic);
+ llvm::Value *EmittedE, bool IsDynamic);
llvm::Value *emitCountedByMemberSize(const Expr *E, llvm::Value *EmittedE,
unsigned Type,
@@ -5456,7 +5409,7 @@ class CodeGenFunction : public CodeGenTypeCache {
void EmitDeclMetadata();
BlockByrefHelpers *buildByrefHelpers(llvm::StructType &byrefType,
- const AutoVarEmission &emission);
+ const AutoVarEmission &emission);
void AddObjCARCExceptionMetadata(llvm::Instruction *Inst);
@@ -5476,7 +5429,8 @@ class CodeGenFunction : public CodeGenTypeCache {
inline DominatingLLVMValue::saved_type
DominatingLLVMValue::save(CodeGenFunction &CGF, llvm::Value *value) {
- if (!needsSaving(value)) return saved_type(value, false);
+ if (!needsSaving(value))
+ return saved_type(value, false);
// Otherwise, we need an alloca.
auto align = CharUnits::fromQuantity(
@@ -5491,7 +5445,8 @@ DominatingLLVMValue::save(CodeGenFunction &CGF, llvm::Value *value) {
inline llvm::Value *DominatingLLVMValue::restore(CodeGenFunction &CGF,
saved_type value) {
// If the value says it wasn't saved, trust that it's still dominating.
- if (!value.getInt()) return value.getPointer();
+ if (!value.getInt())
+ return value.getPointer();
// Otherwise, it should be an alloca instruction, as set up in save().
auto alloca = cast<llvm::AllocaInst>(value.getPointer());
@@ -5499,12 +5454,12 @@ inline llvm::Value *DominatingLLVMValue::restore(CodeGenFunction &CGF,
alloca->getAlign());
}
-} // end namespace CodeGen
+} // end namespace CodeGen
// Map the LangOption for floating point exception behavior into
// the corresponding enum in the IR.
llvm::fp::ExceptionBehavior
ToConstrainedExceptMD(LangOptions::FPExceptionModeKind Kind);
-} // end namespace clang
+} // end namespace clang
#endif
>From 2bfe262c4a99a7e899dc396c7cdd8b058beda600 Mon Sep 17 00:00:00 2001
From: Peter Rong <PeterRong at meta.com>
Date: Tue, 11 Feb 2025 12:27:55 -0800
Subject: [PATCH 2/2] Re-format in response to John's feedback
Signed-off-by: Peter Rong <PeterRong at meta.com>
---
clang/lib/CodeGen/CGObjCMac.cpp | 82 +++++++++++++++--------------
clang/lib/CodeGen/CodeGenFunction.h | 8 ++-
2 files changed, 50 insertions(+), 40 deletions(-)
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 4f5e1ae37eb10..e0f5c8ce22e92 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -761,6 +761,7 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
: skip(_skip), scan(_scan) {}
};
+ // clang-format off
/// opcode for captured block variables layout 'instructions'.
/// In the following descriptions, 'I' is the value of the immediate field.
/// (field following the opcode).
@@ -772,33 +773,33 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
/// a non-pointer. Note that this instruction is equal
/// to '\0'.
/// I != 0: Currently unused.
- BLOCK_LAYOUT_OPERATOR = 0,
+ BLOCK_LAYOUT_OPERATOR = 0,
/// The next I+1 bytes do not contain a value of object pointer type.
/// Note that this can leave the stream unaligned, meaning that
/// subsequent word-size instructions do not begin at a multiple of
/// the pointer size.
- BLOCK_LAYOUT_NON_OBJECT_BYTES = 1,
+ BLOCK_LAYOUT_NON_OBJECT_BYTES = 1,
/// The next I+1 words do not contain a value of object pointer type.
/// This is simply an optimized version of BLOCK_LAYOUT_BYTES for
/// when the required skip quantity is a multiple of the pointer size.
- BLOCK_LAYOUT_NON_OBJECT_WORDS = 2,
+ BLOCK_LAYOUT_NON_OBJECT_WORDS = 2,
/// The next I+1 words are __strong pointers to Objective-C
/// objects or blocks.
- BLOCK_LAYOUT_STRONG = 3,
+ BLOCK_LAYOUT_STRONG = 3,
/// The next I+1 words are pointers to __block variables.
- BLOCK_LAYOUT_BYREF = 4,
+ BLOCK_LAYOUT_BYREF = 4,
/// The next I+1 words are __weak pointers to Objective-C
/// objects or blocks.
- BLOCK_LAYOUT_WEAK = 5,
+ BLOCK_LAYOUT_WEAK = 5,
/// The next I+1 words are __unsafe_unretained pointers to
/// Objective-C objects or blocks.
- BLOCK_LAYOUT_UNRETAINED = 6
+ BLOCK_LAYOUT_UNRETAINED = 6
/// The next I+1 words are block or object pointers with some
/// as-yet-unspecified ownership semantics. If we add more
@@ -812,6 +813,7 @@ class CGObjCCommonMac : public CodeGen::CGObjCRuntime {
/// All other opcodes are reserved. Halt interpretation and
/// treat everything else as opaque.
};
+ // clang-format on
class RUN_SKIP {
public:
@@ -3307,56 +3309,58 @@ void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) {
MethodDefinitions.clear();
}
+// clang-format off
enum FragileClassFlags {
/// Apparently: is not a meta-class.
- FragileABI_Class_Factory = 0x00001,
+ FragileABI_Class_Factory = 0x00001,
/// Is a meta-class.
- FragileABI_Class_Meta = 0x00002,
+ FragileABI_Class_Meta = 0x00002,
/// Has a non-trivial constructor or destructor.
- FragileABI_Class_HasCXXStructors = 0x02000,
+ FragileABI_Class_HasCXXStructors = 0x02000,
/// Has hidden visibility.
- FragileABI_Class_Hidden = 0x20000,
+ FragileABI_Class_Hidden = 0x20000,
/// Class implementation was compiled under ARC.
- FragileABI_Class_CompiledByARC = 0x04000000,
+ FragileABI_Class_CompiledByARC = 0x04000000,
/// Class implementation was compiled under MRC and has MRC weak ivars.
/// Exclusive with CompiledByARC.
- FragileABI_Class_HasMRCWeakIvars = 0x08000000,
+ FragileABI_Class_HasMRCWeakIvars = 0x08000000,
};
enum NonFragileClassFlags {
/// Is a meta-class.
- NonFragileABI_Class_Meta = 0x00001,
+ NonFragileABI_Class_Meta = 0x00001,
/// Is a root class.
- NonFragileABI_Class_Root = 0x00002,
+ NonFragileABI_Class_Root = 0x00002,
/// Has a non-trivial constructor or destructor.
- NonFragileABI_Class_HasCXXStructors = 0x00004,
+ NonFragileABI_Class_HasCXXStructors = 0x00004,
/// Has hidden visibility.
- NonFragileABI_Class_Hidden = 0x00010,
+ NonFragileABI_Class_Hidden = 0x00010,
/// Has the exception attribute.
- NonFragileABI_Class_Exception = 0x00020,
+ NonFragileABI_Class_Exception = 0x00020,
/// (Obsolete) ARC-specific: this class has a .release_ivars method
- NonFragileABI_Class_HasIvarReleaser = 0x00040,
+ NonFragileABI_Class_HasIvarReleaser = 0x00040,
/// Class implementation was compiled under ARC.
- NonFragileABI_Class_CompiledByARC = 0x00080,
+ NonFragileABI_Class_CompiledByARC = 0x00080,
/// Class has non-trivial destructors, but zero-initialization is okay.
NonFragileABI_Class_HasCXXDestructorOnly = 0x00100,
/// Class implementation was compiled under MRC and has MRC weak ivars.
/// Exclusive with CompiledByARC.
- NonFragileABI_Class_HasMRCWeakIvars = 0x00200,
+ NonFragileABI_Class_HasMRCWeakIvars = 0x00200,
};
+// clang-format on
static bool hasWeakMember(QualType type) {
if (type.getObjCLifetime() == Qualifiers::OCL_Weak) {
@@ -4586,9 +4590,9 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// Tell the cleanup not to re-pop the exit.
CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
CGF.EmitBranchThroughCleanup(FinallyRethrow);
-
- // Otherwise, we have to match against the caught exceptions.
- } else {
+ }
+ // Otherwise, we have to match against the caught exceptions.
+ else {
// Retrieve the exception object. We may emit multiple blocks but
// nothing can cross this so the value is already in SSA form.
llvm::CallInst *Caught = CGF.EmitNounwindRuntimeCall(
@@ -4772,9 +4776,9 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
llvm::Value *PropagatingExn;
if (PropagatingExnVar.isValid()) {
PropagatingExn = CGF.Builder.CreateLoad(PropagatingExnVar);
-
- // Otherwise, just look in the buffer for the exception to throw.
- } else {
+ }
+ // Otherwise, just look in the buffer for the exception to throw.
+ else {
llvm::CallInst *Caught = CGF.EmitNounwindRuntimeCall(
ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF));
PropagatingExn = Caught;
@@ -4975,6 +4979,7 @@ std::string CGObjCCommonMac::GetSectionName(StringRef Section,
llvm_unreachable("Unhandled llvm::Triple::ObjectFormatType enum");
}
+// clang-format off
/// EmitImageInfo - Emit the image info marker used to encode some module
/// level information.
///
@@ -4984,20 +4989,19 @@ std::string CGObjCCommonMac::GetSectionName(StringRef Section,
/// unsigned flags;
/// };
enum ImageInfoFlags {
- eImageInfo_FixAndContinue = (1 << 0), // This flag is no longer set by clang.
- eImageInfo_GarbageCollected = (1 << 1),
- eImageInfo_GCOnly = (1 << 2),
- eImageInfo_OptimizedByDyld =
- (1 << 3), // This flag is set by the dyld shared cache.
+ eImageInfo_FixAndContinue = (1 << 0), // This flag is no longer set by clang.
+ eImageInfo_GarbageCollected = (1 << 1),
+ eImageInfo_GCOnly = (1 << 2),
+ eImageInfo_OptimizedByDyld = (1 << 3), // This flag is set by the dyld shared cache.
// A flag indicating that the module has no instances of a @synthesize of a
// superclass variable. This flag used to be consumed by the runtime to work
// around miscompile by gcc.
- eImageInfo_CorrectedSynthesize =
- (1 << 4), // This flag is no longer set by clang.
- eImageInfo_ImageIsSimulated = (1 << 5),
- eImageInfo_ClassProperties = (1 << 6)
+ eImageInfo_CorrectedSynthesize = (1 << 4), // This flag is no longer set by clang.
+ eImageInfo_ImageIsSimulated = (1 << 5),
+ eImageInfo_ClassProperties = (1 << 6)
};
+// clang-format on
void CGObjCCommonMac::EmitImageInfo() {
unsigned version = 0; // Version is unused?
@@ -5392,9 +5396,9 @@ IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC,
// skip forward.
if (beginOfScanInWords > endOfLastScanInWords) {
skip(beginOfScanInWords - endOfLastScanInWords);
-
- // Otherwise, start scanning where the last left off.
- } else {
+ }
+ // Otherwise, start scanning where the last left off.
+ else {
beginOfScanInWords = endOfLastScanInWords;
// If that leaves us with nothing to scan, ignore this request.
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h
index 5c1ff76f2c63a..c3e5324c238f5 100644
--- a/clang/lib/CodeGen/CodeGenFunction.h
+++ b/clang/lib/CodeGen/CodeGenFunction.h
@@ -102,12 +102,18 @@ class TargetCodeGenInfo;
struct OMPTaskDataTy;
struct CGCoroData;
+// clang-format off
/// The kind of evaluation to perform on values of a particular
/// type. Basically, is the code in CGExprScalar, CGExprComplex, or
/// CGExprAgg?
///
/// TODO: should vectors maybe be split out into their own thing?
-enum TypeEvaluationKind { TEK_Scalar, TEK_Complex, TEK_Aggregate };
+enum TypeEvaluationKind {
+ TEK_Scalar,
+ TEK_Complex,
+ TEK_Aggregate
+};
+// clang-format on
#define LIST_SANITIZER_CHECKS \
SANITIZER_CHECK(AddOverflow, add_overflow, 0) \
More information about the cfe-commits
mailing list