Patch to support transparent_union types on

objective-c methods. Fixes radar 7875968.

llvm-svn: 101935
This commit is contained in:
Fariborz Jahanian 2010-04-20 20:28:15 +00:00
parent 4dd125e278
commit 877aaa9706
2 changed files with 27 additions and 0 deletions

View File

@ -216,6 +216,11 @@ bool Sema::CheckMessageArgumentTypes(Expr **Args, unsigned NumArgs,
AssignConvertType Result =
CheckSingleAssignmentConstraints(lhsType, argExpr);
if (Result == Incompatible && !getLangOptions().CPlusPlus &&
CheckTransparentUnionArgumentConstraints(lhsType, argExpr)
== Sema::Compatible)
Result = Compatible;
if (Args[i] != argExpr) // The expression was converted.
Args[i] = argExpr; // Make sure we store the converted expression.

View File

@ -0,0 +1,22 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
typedef union {
struct xx_object_s *_do;
struct xx_continuation_s *_dc;
struct xx_queue_s *_dq;
struct xx_queue_attr_s *_dqa;
struct xx_group_s *_dg;
struct xx_source_s *_ds;
struct xx_source_attr_s *_dsa;
struct xx_semaphore_s *_dsema;
} xx_object_t __attribute__((transparent_union));
@interface INTF
- (void) doSomething : (xx_object_t) xxObject;
- (void)testMeth;
@end
@implementation INTF
- (void) doSomething : (xx_object_t) xxObject {}
- (void)testMeth { struct xx_queue_s *sq; [self doSomething:sq ]; }
@end