diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 10 | ||||
| -rw-r--r-- | clang/test/CodeGenObjC/encode-test.m | 15 |
2 files changed, 20 insertions, 5 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index c50a0210282..d03ed41a152 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -1795,10 +1795,12 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S, } else if (PointeeTy->isObjCInterfaceType()) { S += '@'; - ObjCInterfaceDecl *OI = PointeeTy->getAsObjCInterfaceType()->getDecl(); - S += '"'; - S += OI->getNameAsCString(); - S += '"'; + if (FD) { + ObjCInterfaceDecl *OI = PointeeTy->getAsObjCInterfaceType()->getDecl(); + S += '"'; + S += OI->getNameAsCString(); + S += '"'; + } return; } else if (isObjCClassType(PointeeTy)) { S += '#'; diff --git a/clang/test/CodeGenObjC/encode-test.m b/clang/test/CodeGenObjC/encode-test.m index 982faf03bad..109f0573e52 100644 --- a/clang/test/CodeGenObjC/encode-test.m +++ b/clang/test/CodeGenObjC/encode-test.m @@ -1,6 +1,7 @@ // RUN: clang -fnext-runtime -emit-llvm -o %t %s && // RUN: grep -e "\^{Innermost=CC}" %t | count 1 && -// RUN: grep -e "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}" %t | count 1 +// RUN: grep -e "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}" %t | count 1 && +// RUN: grep -e "{B1=#@c}" %t | count 1 @class Int1; @@ -48,8 +49,20 @@ struct Innermost { @implementation Derived @end +@interface B1 +{ + struct objc_class *isa; + Int1 *sBase; + char c; +} +@end + +@implementation B1 +@end + int main() { const char *en = @encode(Derived); + const char *eb = @encode(B1); } |

