]> granicus.if.org Git - clang/commitdiff
objective-c IRGen: fixes a crash when method type is being mangled
authorFariborz Jahanian <fjahanian@apple.com>
Fri, 29 Jun 2012 22:54:56 +0000 (22:54 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Fri, 29 Jun 2012 22:54:56 +0000 (22:54 +0000)
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

lib/AST/ASTContext.cpp
test/CodeGenObjC/encode-test-6.m [new file with mode: 0644]

index f208f06111e4597e18b24cf4b40f81deff8444d6..916e7d796fb02f4fad2ae3d40591a540e73e7599 100644 (file)
@@ -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 (file)
index 0000000..10681db
--- /dev/null
@@ -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
+