[SemaObjC] Fix ObjCInterfaceDecl::inheritsDesignatedInitializers(), if there are no
designated initializers in the super class hierarchy then it should return false. rdar://16692535 llvm-svn: 207332
This commit is contained in:
parent
ccf45ebc24
commit
357b36a2c0
|
@ -385,11 +385,21 @@ bool ObjCInterfaceDecl::inheritsDesignatedInitializers() const {
|
|||
// misleading warnings.
|
||||
if (isIntroducingInitializers(this)) {
|
||||
data().InheritedDesignatedInitializers = DefinitionData::IDI_NotInherited;
|
||||
return false;
|
||||
} else {
|
||||
data().InheritedDesignatedInitializers = DefinitionData::IDI_Inherited;
|
||||
return true;
|
||||
if (auto SuperD = getSuperClass()) {
|
||||
data().InheritedDesignatedInitializers =
|
||||
SuperD->declaresOrInheritsDesignatedInitializers() ?
|
||||
DefinitionData::IDI_Inherited :
|
||||
DefinitionData::IDI_NotInherited;
|
||||
} else {
|
||||
data().InheritedDesignatedInitializers =
|
||||
DefinitionData::IDI_NotInherited;
|
||||
}
|
||||
}
|
||||
assert(data().InheritedDesignatedInitializers
|
||||
!= DefinitionData::IDI_Unknown);
|
||||
return data().InheritedDesignatedInitializers ==
|
||||
DefinitionData::IDI_Inherited;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -388,3 +388,25 @@ __attribute__((objc_root_class))
|
|||
return self;
|
||||
}
|
||||
@end
|
||||
|
||||
__attribute__((objc_root_class))
|
||||
@interface RootNoDI
|
||||
-(id)init;
|
||||
@end
|
||||
|
||||
@interface Base : RootNoDI
|
||||
@end
|
||||
|
||||
@implementation Base
|
||||
@end
|
||||
|
||||
@interface Derived : Base
|
||||
- (instancetype)initWithInt:(int)n NS_DESIGNATED_INITIALIZER;
|
||||
@end
|
||||
|
||||
@implementation Derived
|
||||
- (instancetype)initWithInt:(int)n
|
||||
{
|
||||
return [super init];
|
||||
}
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue