diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-04-26 21:28:41 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-04-26 21:28:41 +0000 |
| commit | 357b36a2c00c3337fb7011dc3f91e072f0ab81ea (patch) | |
| tree | 9a3de7f5b56da6b6cd86a9883e5f5062cace4339 /clang/lib/AST | |
| parent | ccf45ebc243f560fe7f311999b7d6ead08ccbffb (diff) | |
| download | bcm5719-llvm-357b36a2c00c3337fb7011dc3f91e072f0ab81ea.tar.gz bcm5719-llvm-357b36a2c00c3337fb7011dc3f91e072f0ab81ea.zip | |
[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
Diffstat (limited to 'clang/lib/AST')
| -rw-r--r-- | clang/lib/AST/DeclObjC.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp index 357c1ec5292..aedb097beef 100644 --- a/clang/lib/AST/DeclObjC.cpp +++ b/clang/lib/AST/DeclObjC.cpp @@ -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; } } |

