1/* Test errors for assignments and comparisons between ObjC and C++ types. */ 2/* Author: Nicola Pero <nicola@brainstorm.co.uk>. */ 3/* { dg-do compile } */ 4 5#include <objc/objc.h> 6 7/* The NeXT runtime headers do not define NULL. */ 8#ifndef NULL 9#define NULL ((void *)0) 10#endif 11 12@protocol MyProtocol 13- (void) method; 14@end 15 16@interface MyClass 17@end 18 19int main() 20{ 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; 28 29 /* These should all generate warnings. */ 30 31 obj = i; /* { dg-error "invalid conversion" } */ 32 obj = j; /* { dg-error "cannot convert" } */ 33 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" } */ 39 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" } */ 57 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" } */ 62 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" } */ 67 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" } */ 72 73 return 0; 74} 75