Merge reload-branch up to revision 101000
[official-gcc.git] / gcc / testsuite / obj-c++.dg / comp-types-5.mm
blob99f6772bd42eeb7742cc3189b147aaf0a1ad1f28
1 /* Test errors for assignments and comparisons between ObjC and C++ types.  */
2 /* Author: Nicola Pero <nicola@brainstorm.co.uk>.  */
3 /* { dg-do compile } */
5 #include <objc/objc.h>
7 /* The NeXT runtime headers do not define NULL.  */
8 #ifndef NULL
9 #define NULL ((void *)0)
10 #endif
12 @protocol MyProtocol
13 - (void) method;
14 @end
16 @interface MyClass
17 @end
19 int main()
21   id obj = nil;
22   id <MyProtocol> obj_p = nil;
23   MyClass *obj_c = nil;
24   Class obj_C = Nil;
25   
26   int i = 0;
27   int *j = (int *)NULL;
29   /* These should all generate warnings.  */
30   
31   obj = i; /* { dg-error "invalid conversion" } */
32   obj = j; /* { dg-error "cannot convert" } */
34   obj_p = i; /* { dg-error "invalid conversion" } */
35   obj_p = j; /* { dg-error "cannot convert" } */
36   
37   obj_c = i; /* { dg-error "invalid conversion" } */
38   obj_c = j; /* { dg-error "cannot convert" } */
40   obj_C = i; /* { dg-error "invalid conversion" } */
41   obj_C = j; /* { dg-error "cannot convert" } */
42   
43   i = obj;   /* { dg-error "invalid conversion" } */
44   i = obj_p; /* { dg-error "invalid conversion" } */
45   i = obj_c; /* { dg-error "invalid conversion" } */
46   i = obj_C; /* { dg-error "invalid conversion" } */
47   
48   j = obj;   /* { dg-error "cannot convert" } */
49   j = obj_p; /* { dg-error "cannot convert" } */
50   j = obj_c; /* { dg-error "cannot convert" } */
51   j = obj_C; /* { dg-error "cannot convert" } */
52   
53   if (obj == i) ; /* { dg-error "comparison between pointer and integer" } */
54   if (i == obj) ; /* { dg-error "comparison between pointer and integer" } */
55   if (obj == j) ; /* { dg-error "lacks a cast" } */
56   if (j == obj) ; /* { dg-error "lacks a cast" } */
58   if (obj_c == i) ; /*{ dg-error "comparison between pointer and integer" }*/
59   if (i == obj_c) ; /*{ dg-error "comparison between pointer and integer" }*/
60   if (obj_c == j) ; /* { dg-error "lacks a cast" } */
61   if (j == obj_c) ; /* { dg-error "lacks a cast" } */
63   if (obj_p == i) ; /*{ dg-error "comparison between pointer and integer" }*/
64   if (i == obj_p) ; /*{ dg-error "comparison between pointer and integer" }*/
65   if (obj_p == j) ; /* { dg-error "lacks a cast" } */
66   if (j == obj_p) ; /* { dg-error "lacks a cast" } */
68   if (obj_C == i) ; /*{ dg-error "comparison between pointer and integer" }*/
69   if (i == obj_C) ; /*{ dg-error "comparison between pointer and integer" }*/
70   if (obj_C == j) ; /* { dg-error "lacks a cast" } */
71   if (j == obj_C) ; /* { dg-error "lacks a cast" } */
73   return 0;