Author: Jin Lin
Date: 2020-03-11T13:26:06-07:00
New Revision: a0cacb60549f2346f7addf9205cd32720afc8fb4
URL:
https://github.com/llvm/llvm-project/commit/a0cacb60549f2346f7addf9205cd32720afc8fb4
DIFF:
https://github.com/llvm/llvm-project/commit/a0cacb60549f2346f7addf9205cd32720afc8fb4.diff
LOG: Fix conflict value for metadata "Objective-C Garbage Collection" in the
mix of swift and Objective-C bitcode
Summary:
The change is to fix conflict value for metadata "Objective-C Garbage
Collection" in the mix of swift and Objective-C bitcode.
The purpose is to provide the support of LTO for swift and Objective-C mixed
project.
Reviewers: rjmccall, ahatanak, steven_wu
Reviewed By: rjmccall, steven_wu
Subscribers: manmanren, mehdi_amini, hiraditya, dexonsmith, llvm-commits, jinlin
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D71219
Added:
llvm/test/Bitcode/upgrade-garbage-collection-for-objc.ll
llvm/test/Bitcode/upgrade-garbage-collection-for-swift.ll
llvm/test/Linker/Inputs/empty-objc.ll
llvm/test/Linker/empty-swift.ll
llvm/test/Object/objc-swift-mixed-imageinfo-macho.ll
Modified:
clang/lib/CodeGen/CGObjCMac.cpp
clang/test/CodeGenObjC/image-info.m
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/IR/AutoUpgrade.cpp
Removed:
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 0ab4fd8e224c..44c14a745a98 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -5159,15 +5159,18 @@ void CGObjCCommonMac::EmitImageInfo() {
Mod.addModuleFlag(llvm::Module::Error, "Objective-C Image Info Section",
llvm::MDString::get(VMContext, Section));
+ auto Int8Ty = llvm::Type::getInt8Ty(VMContext);
if (CGM.getLangOpts().getGC() == LangOptions::NonGC) {
// Non-GC overrides those files which specify GC.
-Mod.addModuleFlag(llvm::Module::Override,
- "Objective-C Garbage Collection", (uint32_t)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",
- eImageInfo_GarbageCollected);
+ llvm::ConstantInt::get(Int8Ty,
+(uint8_t)eImageInfo_GarbageCollected));
if (CGM.getLangOpts().getGC() == LangOptions::GCOnly) {
// Add the ObjC GC Only value.
@@ -5178,7 +5181,7 @@ void CGObjCCommonMac::EmitImageInfo() {
llvm::Metadata *Ops[2] = {
llvm::MDString::get(VMContext, "Objective-C Garbage Collection"),
llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
- llvm::Type::getInt32Ty(VMContext),
eImageInfo_GarbageCollected))};
+ Int8Ty, eImageInfo_GarbageCollected))};
Mod.addModuleFlag(llvm::Module::Require, "Objective-C GC Only",
llvm::MDNode::get(VMContext, Ops));
}
diff --git a/clang/test/CodeGenObjC/image-info.m
b/clang/test/CodeGenObjC/image-info.m
index 37156ed039e4..2b9af900354b 100644
--- a/clang/test/CodeGenObjC/image-info.m
+++ b/clang/test/CodeGenObjC/image-info.m
@@ -8,10 +8,10 @@
// CHECK-FRAGILE: !{{[0-9]+}} = !{i32 1, !"Objective-C Version", i32 1}
// CHECK-FRAGILE-NEXT: !{{[0-9]+}} = !{i32 1, !"Objective-C Image Info
Version", i32 0}
// CHECK-FRAGILE-NEXT: !{{[0-9]+}} = !{i32 1, !"Objective-C Image Info
Section", !"__OBJC,__image_info,regular"}
-// CHECK-FRAGILE-NEXT: !{{[0-9]+}} = !{i32 4, !"Objective-C Garbage
Collection", i32 0}
+// CHECK-FRAGILE-NEXT: !{{[0-9]+}} = !{i32 1, !"Objective-C Garbage
Collection", i8 0}
// CHECK-NONFRAGILE: !llvm.module.flags = !{{{.*}}}
// CHECK-NONFRAGILE: !{{[0-9]+}} = !{i32 1, !"Objective-C Version", i32 2}
// CHECK-NONFRAGILE-NEXT: !{{[0-9]+}} = !{i32 1, !"Objective-C Image Info
Version", i32 0}
// CHECK-NONFRAGILE-NEXT: !{{[0-9]+}} = !{i32 1, !"Objective-C Image Info
Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"}
-// CHECK-NONFRAGILE-NEXT: !{{[0-9]+}} = !{i32 4, !"Objective-C Garbage
Collection", i32 0}
+// CHECK-NONFRAGILE-NEXT: !{{[0-9]+}} = !{i32 1, !"Objective-C Garbage
Collection", i8 0}
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index d36d04e42cbe..2ce285c85672 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -84,6 +84,15 @@ static void GetObjCImageInfo(Module &M, unsigned &Version,
unsigned &Flags,
} else if (Key == "Objective-C Image Info Section") {
Section = cast(MFE.Val)->getString();
}
+// Backend generates L_OBJC_IMAGE_INFO from Swift ABI version + major +
mino