Set a bit in IMAGE_INFO to indicate that we don't contain any

@synthesized ivars for superclasses.
 - <rdar://problem/6806371> [clang] Mark code without miscompiled
   @synthesized properties

llvm-svn: 69581
This commit is contained in:
Daniel Dunbar 2009-04-20 07:11:47 +00:00
parent 52289d3343
commit 75e909f5e0
2 changed files with 14 additions and 3 deletions

View File

@ -2426,9 +2426,15 @@ llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
/// unsigned flags;
/// };
enum ImageInfoFlags {
eImageInfo_FixAndContinue = (1 << 0), // FIXME: Not sure what this implies
eImageInfo_GarbageCollected = (1 << 1),
eImageInfo_GCOnly = (1 << 2)
eImageInfo_FixAndContinue = (1 << 0), // FIXME: Not sure what
// this implies.
eImageInfo_GarbageCollected = (1 << 1),
eImageInfo_GCOnly = (1 << 2),
eImageInfo_OptimizedByDyld = (1 << 3), // FIXME: When is this set.
// A flag indicating that the module has no instances of an
// @synthesize of a superclass variable. <rdar://problem/6803242>
eImageInfo_CorrectedSynthesize = (1 << 4)
};
void CGObjCMac::EmitImageInfo() {
@ -2440,6 +2446,9 @@ void CGObjCMac::EmitImageInfo() {
flags |= eImageInfo_GarbageCollected;
if (CGM.getLangOptions().getGCMode() == LangOptions::GCOnly)
flags |= eImageInfo_GCOnly;
// We never allow @synthesize of a superclass property.
flags |= eImageInfo_CorrectedSynthesize;
// Emitted as int[2];
llvm::Constant *values[2] = {

View File

@ -0,0 +1,2 @@
// RUN: clang-cc -triple x86_64-apple-darwin-10 -emit-llvm -o %t %s &&
// RUN: grep -F '@"\01L_OBJC_IMAGE_INFO" = internal constant [2 x i32] [i32 0, i32 16], section "__OBJC, __image_info,regular"' %t