Preserving locations for variable-uses and constants (PR c++/43486)
[official-gcc.git] / gcc / testsuite / objc.dg / try-catch-10.m
blob320185fe0b3411f90744587b18c7c3377a64436d
1 /* Ensure that @try/@catch blocks do not mess with types of
2    local objects (other than their volatile bits).  */
4 /* { dg-options "-fobjc-exceptions" } */
5 /* { dg-do compile } */
7 #include "../objc-obj-c++-shared/TestsuiteObject.h"
9 @protocol Proto1
10 - (int)meth1;
11 @end
13 @protocol Proto2
14 - (int)meth2;
15 @end
17 @interface MyClass: TestsuiteObject <Proto2> {
18   int a;
20 - (int)meth2;
21 - (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2;
22 @end
24 MyClass *mc1, *mc2;
26 @implementation MyClass
27 - (int)meth2 {
28   return a;
30 - (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
31   @try {
32     mc2 = p2;   /* { dg-warning "type .id <Proto1>. does not conform to the .Proto2. protocol" } */
33   }
34   @catch (id exc) {
35     return exc;
36   }
37   mc1 = p1;  /* no warning here! */
38   return self;
40 @end