diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-06-29 22:54:56 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-06-29 22:54:56 +0000 |
commit | 7e68ba5660a9b2b854df4ae7a556e6b91d738c6c (patch) | |
tree | ba3a0d3db9ca4b9fad1e6e84a0efc6d79358f128 | |
parent | e75d9cfbf41a0ee9e456a665776f91fdd9773b36 (diff) |
objective-c IRGen: fixes a crash when method type is being mangled
when an argument type size is 0. // rdar://11777609, PR13229
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159472 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/ASTContext.cpp | 8 | ||||
-rw-r--r-- | test/CodeGenObjC/encode-test-6.m | 19 |
2 files changed, 23 insertions, 4 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index f208f06111..916e7d796f 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -4190,8 +4190,8 @@ bool ASTContext::getObjCEncodingForFunctionDecl(const FunctionDecl *Decl, QualType PType = (*PI)->getType(); CharUnits sz = getObjCEncodingTypeSize(PType); if (sz.isZero()) - return true; - + continue; + assert (sz.isPositive() && "getObjCEncodingForFunctionDecl - Incomplete param type"); ParmOffset += sz; @@ -4259,8 +4259,8 @@ bool ASTContext::getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl, QualType PType = (*PI)->getType(); CharUnits sz = getObjCEncodingTypeSize(PType); if (sz.isZero()) - return true; - + continue; + assert (sz.isPositive() && "getObjCEncodingForMethodDecl - Incomplete param type"); ParmOffset += sz; diff --git a/test/CodeGenObjC/encode-test-6.m b/test/CodeGenObjC/encode-test-6.m new file mode 100644 index 0000000000..10681dbcc5 --- /dev/null +++ b/test/CodeGenObjC/encode-test-6.m @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o %t %s +// RUN: FileCheck < %t %s +// rdar://11777609 + +typedef struct {} Z; + +@interface A +-(void)bar:(Z)a; +-(void)foo:(Z)a : (char*)b : (Z)c : (double) d; +@end + +@implementation A +-(void)bar:(Z)a {} +-(void)foo:(Z)a: (char*)b : (Z)c : (double) d {} +@end + +// CHECK: internal global [14 x i8] c"v16@0:8{?=}16 +// CHECK: internal global [26 x i8] c"v32@0:8{?=}16*16{?=}24d24 + |