[cfe-commits] r150648 - in /cfe/trunk: lib/CodeGen/CGObjCMac.cpp test/CodeGenObjC/debug-info-block-helper.m test/CodeGenObjC/image-info.m test/CodeGenObjC/objc-align.m

Chad Rosier mcrosier at apple.com
Wed Feb 15 18:05:03 PST 2012


Bill,
Committed clang revision 150650.  Please verify this is the correct fix.

 Chad


On Feb 15, 2012, at 5:47 PM, Chad Rosier wrote:

> Bill,
> Did you by chance miss one test case?
> 
> ******************** TEST 'Clang :: CodeGenObjC/arc-no-arc-exceptions.m' FAILED ********************Script:
> --
> Exit Code: 1
> Command Output (stderr):
> --
> /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-gcc42-RA/clang.src/test/CodeGenObjC/arc-no-arc-exceptions.m:12:11: error: expected string not found in input
> // CHECK: call void @thrower(), !clang.arc.no_objc_arc_exceptions !0
>           ^
> <stdin>:48:20: note: scanning from here
> define void @test0() {
>                    ^
> <stdin>:50:2: note: possible intended match here
>  call void @thrower(), !clang.arc.no_objc_arc_exceptions !4
>  ^
> --
> 
> ********************
>  Chad
> 
> 
> On Feb 15, 2012, at 5:13 PM, Bill Wendling wrote:
> 
>> Author: void
>> Date: Wed Feb 15 19:13:30 2012
>> New Revision: 150648
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=150648&view=rev
>> Log:
>> Use the new method for specifying garbage collection metadata in the module.
>> 
>> The garbage collection metadata needs to be merged "intelligently", when two or
>> more modules are linked together, and not merely appended. (Appending creates a
>> section which is too large.) The module flags metadata method is the way to do
>> this.
>> <rdar://problem/8198537>
>> 
>> Modified:
>>    cfe/trunk/lib/CodeGen/CGObjCMac.cpp
>>    cfe/trunk/test/CodeGenObjC/debug-info-block-helper.m
>>    cfe/trunk/test/CodeGenObjC/image-info.m
>>    cfe/trunk/test/CodeGenObjC/objc-align.m
>> 
>> Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=150648&r1=150647&r2=150648&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Wed Feb 15 19:13:30 2012
>> @@ -3568,33 +3568,48 @@
>> 
>> void CGObjCCommonMac::EmitImageInfo() {
>>   unsigned version = 0; // Version is unused?
>> -  unsigned flags = 0;
>> -
>> -  // FIXME: Fix and continue?
>> -  if (CGM.getLangOptions().getGC() != LangOptions::NonGC)
>> -    flags |= eImageInfo_GarbageCollected;
>> -  if (CGM.getLangOptions().getGC() == LangOptions::GCOnly)
>> -    flags |= eImageInfo_GCOnly;
>> -
>> -  // We never allow @synthesize of a superclass property.
>> -  flags |= eImageInfo_CorrectedSynthesize;
>> -
>> -  // Emitted as int[2];
>> -  uint32_t Values[2] = { version, flags };
>> -
>> -  const char *Section;
>> -  if (ObjCABI == 1)
>> -    Section = "__OBJC, __image_info,regular";
>> -  else
>> -    Section = "__DATA, __objc_imageinfo, regular, no_dead_strip";
>> -  llvm::GlobalVariable *GV =
>> -    CreateMetadataVar("\01L_OBJC_IMAGE_INFO",
>> -                      llvm::ConstantDataArray::get(VMContext, Values),
>> -                      Section, 0, true);
>> -  GV->setConstant(true);
>> +  const char *Section = (ObjCABI == 1) ?
>> +    "__OBJC, __image_info,regular" :
>> +    "__DATA, __objc_imageinfo, regular, no_dead_strip";
>> +
>> +  // Generate module-level named metadata to convey this information to the
>> +  // linker and code-gen.
>> +  llvm::Module &Mod = CGM.getModule();
>> +
>> +  // Add the ObjC ABI version to the module flags.
>> +  Mod.addModuleFlag(llvm::Module::Error, "Objective-C Version", ObjCABI);
>> +  Mod.addModuleFlag(llvm::Module::Error, "Objective-C Image Info Version",
>> +                    version);
>> +  Mod.addModuleFlag(llvm::Module::Error, "Objective-C Image Info Section",
>> +                    llvm::MDString::get(VMContext,Section));
>> +
>> +  if (CGM.getLangOptions().getGC() == LangOptions::NonGC) {
>> +    // Non-GC overrides those files which specify GC.
>> +    Mod.addModuleFlag(llvm::Module::Override,
>> +                      "Objective-C Garbage Collection", (uint32_t)0);
>> +  } else {
>> +    // Add the ObjC garbage collection value.
>> +    Mod.addModuleFlag(llvm::Module::Error,
>> +                      "Objective-C Garbage Collection",
>> +                      eImageInfo_GarbageCollected);
>> +
>> +    if (CGM.getLangOptions().getGC() == LangOptions::GCOnly) {
>> +      // Add the ObjC GC Only value.
>> +      Mod.addModuleFlag(llvm::Module::Error, "Objective-C GC Only",
>> +                        eImageInfo_GCOnly);
>> +
>> +      // Require that GC be specified and set to eImageInfo_GarbageCollected.
>> +      llvm::Value *Ops[2] = {
>> +        llvm::MDString::get(VMContext, "Objective-C Garbage Collection"),
>> +        llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),
>> +                               eImageInfo_GarbageCollected)
>> +      };
>> +      Mod.addModuleFlag(llvm::Module::Require, "Objective-C GC Only",
>> +                        llvm::MDNode::get(VMContext, Ops));
>> +    }
>> +  }
>> }
>> 
>> -
>> // struct objc_module {
>> //   unsigned long version;
>> //   unsigned long size;
>> 
>> Modified: cfe/trunk/test/CodeGenObjC/debug-info-block-helper.m
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/debug-info-block-helper.m?rev=150648&r1=150647&r2=150648&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenObjC/debug-info-block-helper.m (original)
>> +++ cfe/trunk/test/CodeGenObjC/debug-info-block-helper.m Wed Feb 15 19:13:30 2012
>> @@ -2,7 +2,7 @@
>> // RUN: %clang_cc1 -emit-llvm -fblocks -g -triple x86_64-apple-darwin10 -fobjc-fragile-abi %s -o - | FileCheck %s
>> extern void foo(void(^)(void));
>> 
>> -// CHECK: !36 = metadata !{i32 {{.*}}, i32 0, metadata !6, metadata !"__destroy_helper_block_", metadata !"__destroy_helper_block_", metadata !"", metadata !6, i32 24, metadata !37, i1 true, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (i8*)* @__destroy_helper_block_, null, null, metadata !39} ; [ DW_TAG_subprogram ]
>> +// CHECK: !40 = metadata !{i32 {{.*}}, i32 0, metadata !10, metadata !"__destroy_helper_block_", metadata !"__destroy_helper_block_", metadata !"", metadata !10, i32 24, metadata !41, i1 true, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (i8*)* @__destroy_helper_block_, null, null, metadata !43} ; [ DW_TAG_subprogram ]
>> 
>> @interface NSObject {
>>   struct objc_object *isa;
>> 
>> Modified: cfe/trunk/test/CodeGenObjC/image-info.m
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/image-info.m?rev=150648&r1=150647&r2=150648&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenObjC/image-info.m (original)
>> +++ cfe/trunk/test/CodeGenObjC/image-info.m Wed Feb 15 19:13:30 2012
>> @@ -4,5 +4,14 @@
>> // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o %t %s
>> // RUN: FileCheck --check-prefix CHECK-NONFRAGILE < %t %s
>> 
>> -// CHECK-FRAGILE: @"\01L_OBJC_IMAGE_INFO" = internal constant [2 x i32] [i32 0, i32 16], section "__OBJC, __image_info,regular"
>> -// CHECK-NONFRAGILE: @"\01L_OBJC_IMAGE_INFO" = internal constant [2 x i32] [i32 0, i32 16], section "__DATA, __objc_imageinfo, regular, no_dead_strip"
>> +// CHECK-FRAGILE:      !llvm.module.flags = !{!0, !1, !2, !3}
>> +// CHECK-FRAGILE:      !0 = metadata !{i32 1, metadata !"Objective-C Version", i32 1}
>> +// CHECK-FRAGILE-NEXT: !1 = metadata !{i32 1, metadata !"Objective-C Image Info Version", i32 0}
>> +// CHECK-FRAGILE-NEXT: !2 = metadata !{i32 1, metadata !"Objective-C Image Info Section", metadata !"__OBJC, __image_info,regular"}
>> +// CHECK-FRAGILE-NEXT: !3 = metadata !{i32 4, metadata !"Objective-C Garbage Collection", i32 0}
>> +
>> +// CHECK-NONFRAGILE:      !llvm.module.flags = !{!0, !1, !2, !3}
>> +// CHECK-NONFRAGILE:      !0 = metadata !{i32 1, metadata !"Objective-C Version", i32 2}
>> +// CHECK-NONFRAGILE-NEXT: !1 = metadata !{i32 1, metadata !"Objective-C Image Info Version", i32 0}
>> +// CHECK-NONFRAGILE-NEXT: !2 = metadata !{i32 1, metadata !"Objective-C Image Info Section", metadata !"__DATA, __objc_imageinfo, regular, no_dead_strip"}
>> +// CHECK-NONFRAGILE-NEXT: !3 = metadata !{i32 4, metadata !"Objective-C Garbage Collection", i32 0}
>> 
>> Modified: cfe/trunk/test/CodeGenObjC/objc-align.m
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/objc-align.m?rev=150648&r1=150647&r2=150648&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenObjC/objc-align.m (original)
>> +++ cfe/trunk/test/CodeGenObjC/objc-align.m Wed Feb 15 19:13:30 2012
>> @@ -6,7 +6,6 @@
>> // RUN: grep '@"\\01L_OBJC_CLASS_A" = internal global .*, section "__OBJC,__class,regular,no_dead_strip", align 4' %t
>> // RUN: grep '@"\\01L_OBJC_CLASS_C" = internal global .*, section "__OBJC,__class,regular,no_dead_strip", align 4' %t
>> // RUN: grep '@"\\01L_OBJC_CLASS_PROTOCOLS_C" = internal global .*, section "__OBJC,__cat_cls_meth,regular,no_dead_strip", align 4' %t
>> -// RUN: grep '@"\\01L_OBJC_IMAGE_INFO" = internal constant .*, section "__OBJC, __image_info,regular"' %t
>> // RUN: grep '@"\\01L_OBJC_METACLASS_A" = internal global .*, section "__OBJC,__meta_class,regular,no_dead_strip", align 4' %t
>> // RUN: grep '@"\\01L_OBJC_METACLASS_C" = internal global .*, section "__OBJC,__meta_class,regular,no_dead_strip", align 4' %t
>> // RUN: grep '@"\\01L_OBJC_MODULES" = internal global .*, section "__OBJC,__module_info,regular,no_dead_strip", align 4' %t
>> @@ -20,7 +19,6 @@
>> // RUNX: grep '@"OBJC_METACLASS_$_A" = global' %t &&
>> // RUNX: grep '@"OBJC_METACLASS_$_C" = global' %t &&
>> // RUNX: grep '@"\\01L_OBJC_CLASSLIST_REFERENCES_$_0" = internal global .*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8' %t &&
>> -// RUNX: grep '@"\\01L_OBJC_IMAGE_INFO" = internal constant .*, section "__DATA, __objc_imageinfo, regular, no_dead_strip"' %t &&
>> // RUNX: grep '@"\\01L_OBJC_LABEL_CATEGORY_$" = internal global .*, section "__DATA, __objc_catlist, regular, no_dead_strip", align 8' %t &&
>> // RUNX: grep '@"\\01L_OBJC_LABEL_CLASS_$" = internal global .*, section "__DATA, __objc_classlist, regular, no_dead_strip", align 8' %t &&
>> // RUNX: grep '@"\\01l_OBJC_$_CATEGORY_A_$_Cat" = internal global .*, section "__DATA, __objc_const", align 8' %t &&
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120215/25698a6a/attachment.html>


More information about the cfe-commits mailing list