Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/objc.dg/method-conflict-4.m @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */ /* { dg-do compile } */ #include <objc/objc.h> /* Test that the compiler can correctly compare protocols in types of method signatures. In this test we look at protocols implementing other protocols. The fact that one protocol implements another one doesn't mean that they are identical. */ @protocol A - (void) doSomething; @end @protocol B <A> - (void) doSomethingElse; @end @protocol C <A> - (void) doYetSomethingElse; @end @interface MyClass2 - (void) aMethod: (id <A>)x; /* { dg-message "previous declaration" } */ - (void) aMethod: (id <B>)x; /* { dg-error "duplicate declaration" } */ - (void) bMethod: (id <B>)x; /* { dg-message "previous declaration" } */ - (void) bMethod: (id <A>)x; /* { dg-error "duplicate declaration" } */ - (void) cMethod: (id <A, B>)x; - (void) cMethod: (id <B>)x; /* Ok - because if you implement B, then you also implement A, so <B> == <A, B> */ - (void) dMethod: (id <A, B>)x; - (void) dMethod: (id <B, A>)x; /* Ok */ - (void) eMethod: (id <A>)x; /* { dg-message "previous declaration" } */ - (void) eMethod: (id <B, C>)x; /* { dg-error "duplicate declaration" } */ - (void) fMethod: (id <B, C>)x; /* { dg-message "previous declaration" } */ - (void) fMethod: (id <A>)x; /* { dg-error "duplicate declaration" } */ - (void) gMethod: (id <A>)x; /* { dg-message "previous declaration" } */ - (void) gMethod: (id <A, B, C>)x; /* { dg-error "duplicate declaration" } */ - (void) hMethod: (id <A, B, C>)x; /* { dg-message "previous declaration" } */ - (void) hMethod: (id <A>)x; /* { dg-error "duplicate declaration" } */ @end