diff options
author | Ziemowit Laski <zlaski@apple.com> | 2004-08-25 19:42:08 +0000 |
---|---|---|
committer | Ziemowit Laski <zlaski@apple.com> | 2004-08-25 19:42:08 +0000 |
commit | 72480e091c8d9dc7d73cfe1836a92998637a19d6 (patch) | |
tree | 07d74065f3181955e8c06e9970e64a7c404dc603 | |
parent | b72ae107c96b1db37ac7bea3d12d2f220b6b35a2 (diff) |
[gcc/ChangeLog.objc-improvements]
2004-08-25 Ziemowit Laski <zlaski@apple.com>
* c-typeck.c: Sync ObjC changes with mainline.
[gcc/testsuite/ChangeLog.objc-improvements]
2004-08-25 Ziemowit Laski <zlaski@apple.com>
* objc.dg/proto-lossage-4.m: Brought over from mainline.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/objc-improvements-branch@86569 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.objc-improvements | 4 | ||||
-rw-r--r-- | gcc/c-typeck.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog.objc-improvements | 4 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/proto-lossage-4.m | 51 |
4 files changed, 61 insertions, 2 deletions
diff --git a/gcc/ChangeLog.objc-improvements b/gcc/ChangeLog.objc-improvements index 1428a73b892..049226a9316 100644 --- a/gcc/ChangeLog.objc-improvements +++ b/gcc/ChangeLog.objc-improvements @@ -1,3 +1,7 @@ +2004-08-25 Ziemowit Laski <zlaski@apple.com> + + * c-typeck.c: Sync ObjC changes with mainline. + 2004-08-21 Ziemowit Laski <zlaski@apple.com> * c-decl.c (build_cdtor) Move calls to objc_static_init_needed_p() diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 76d3840cddf..7474a8de0c3 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -1440,7 +1440,7 @@ build_component_ref (tree datum, tree component) tree field = NULL; tree ref; - if (c_dialect_objc () && !objc_is_public (datum, component)) + if (!objc_is_public (datum, component)) return error_mark_node; /* If DATUM is a COMPOUND_EXPR, move our reference inside it. @@ -2917,7 +2917,7 @@ build_c_cast (tree type, tree expr) /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing only in <protocol> qualifications. But when constructing cast expressions, the protocols do matter and must be kept around. */ - if (c_dialect_objc () && objc_is_object_ptr (type) && type != TREE_TYPE (expr)) + if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr))) return build1 (NOP_EXPR, type, expr); type = TYPE_MAIN_VARIANT (type); diff --git a/gcc/testsuite/ChangeLog.objc-improvements b/gcc/testsuite/ChangeLog.objc-improvements index fddcd2beb33..b86f0856352 100644 --- a/gcc/testsuite/ChangeLog.objc-improvements +++ b/gcc/testsuite/ChangeLog.objc-improvements @@ -1,3 +1,7 @@ +2004-08-25 Ziemowit Laski <zlaski@apple.com> + + * objc.dg/proto-lossage-4.m: Brought over from mainline. + 2004-08-21 Ziemowit Laski <zlaski@apple.com> * objc/execute/IMP.m: Include <stdlib.h>. diff --git a/gcc/testsuite/objc.dg/proto-lossage-4.m b/gcc/testsuite/objc.dg/proto-lossage-4.m new file mode 100644 index 00000000000..a0a79840886 --- /dev/null +++ b/gcc/testsuite/objc.dg/proto-lossage-4.m @@ -0,0 +1,51 @@ +/* Test for situations in which protocol conformance information + may be lost while casting. */ +/* Author: Ziemowit Laski <zlaski@apple.com>. */ +/* { dg-do compile } */ + +/* One-line substitute for objc/objc.h */ +typedef struct objc_object { struct objc_class *class_pointer; } *id; + +@protocol Proto +- (int)someValue; +@end + +@interface Obj +- (int)anotherValue; +@end + +int foo(void) { + int receiver = 2; + Obj *objrcvr; + Obj <Proto> *objrcvr2; + + receiver += [receiver someValue]; /* { dg-warning "invalid receiver type .int( )?." } */ +/* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 22 } */ +/* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 22 } */ +/* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 22 } */ +/* { dg-warning "assignment makes integer from pointer without a cast" } */ + + receiver += [receiver anotherValue]; /* { dg-warning "invalid receiver type .int( )?." } */ +/* { dg-warning "assignment makes integer from pointer without a cast" "" { target *-*-* } 28 } */ + + receiver += [(Obj *)receiver someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } */ +/* { dg-warning "assignment makes integer from pointer without a cast" "" { target *-*-* } 31 } */ + + receiver += [(Obj *)receiver anotherValue]; + receiver += [(Obj <Proto> *)receiver someValue]; + receiver += [(Obj <Proto> *)receiver anotherValue]; + receiver += [objrcvr someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } */ +/* { dg-warning "assignment makes integer from pointer without a cast" "" { target *-*-* } 37 } */ + + receiver += [objrcvr anotherValue]; + receiver += [(Obj <Proto> *)objrcvr someValue]; + receiver += [(Obj <Proto> *)objrcvr anotherValue]; + receiver += [objrcvr2 someValue]; + receiver += [objrcvr2 anotherValue]; + receiver += [(Obj *)objrcvr2 someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } */ +/* { dg-warning "assignment makes integer from pointer without a cast" "" { target *-*-* } 45 } */ + + receiver += [(Obj *)objrcvr2 anotherValue]; + + return receiver; +} |