diff options
author | David Ayers <ayers@gcc.gnu.org> | 2009-03-29 08:09:44 +0000 |
---|---|---|
committer | David Ayers <ayers@gcc.gnu.org> | 2009-03-29 08:09:44 +0000 |
commit | 4ea80a418fb9c977a460b803842c3ba744813a11 (patch) | |
tree | c86f1d38fc26655b1b4f52d8b894e2fde5d59f3a /gcc/testsuite | |
parent | f988ec96d922819a4948c1ed96c6dc1b79a7ad22 (diff) | |
download | gcc-4ea80a418fb9c977a460b803842c3ba744813a11.zip gcc-4ea80a418fb9c977a460b803842c3ba744813a11.tar.gz gcc-4ea80a418fb9c977a460b803842c3ba744813a11.tar.bz2 |
re PR objc/27377 (false compiler warnings generated in Objective-C code)
gcc/
2009-03-00 David Ayers <ayers@fsfe.org>
PR objc/27377
* c-typeck.c (build_conditional_expr): Emit ObjC warnings
by calling objc_compare_types and surpress warnings about
incompatible C pointers that are compatible ObjC pointers.
testsuite/
2009-03-00 David Ayers <ayers@fsfe.org>
PR objc/27377
* objc.dg/conditional-1.m: New tests.
From-SVN: r145225
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/conditional-1.m | 45 |
2 files changed, 50 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b1d82e1..16415c6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-03-29 David Ayers <ayers@fsfe.org> + + PR objc/27377 + * objc.dg/conditional-1.m: New tests. + 2009-03-28 Adam Nemet <anemet@caviumnetworks.com> * gcc.dg/winline-10.c: New test. diff --git a/gcc/testsuite/objc.dg/conditional-1.m b/gcc/testsuite/objc.dg/conditional-1.m new file mode 100644 index 0000000..0aad62c --- /dev/null +++ b/gcc/testsuite/objc.dg/conditional-1.m @@ -0,0 +1,45 @@ +/* Testing conditional warnings (without headers). */ +/* Author: David Ayers */ + +/* { dg-do compile } */ + +#define nil ((id)0) +@interface MyObject +@end + +@protocol MyProtocol +@end + +@interface MyProtoObject <MyProtocol> +@end + + +int +main (int argc, char *argv[]) +{ + id var_id = nil; + id <MyProtocol> var_id_p = nil; + MyObject *var_obj = nil; + MyProtoObject *var_obj_p = nil; + + var_id = (var_id == var_obj) ? var_id : var_obj; + var_id = (var_id == var_obj) ? var_id : var_obj_p; + + /* Ayers: Currently, the following test case passes for + technically the wrong reason (see below). + */ + var_obj_p = (var_id == var_obj) ? var_obj_p : var_obj; /* { dg-warning "distinct Objective-C types" } */ + var_obj_p = (var_id == var_obj) ? var_obj_p : var_id_p; + + /* Ayers: The first of the following test cases + should probably warn for var_obj_p = var_obj, + yet that would require extensive changes to + build_conditional_expr to create a tree with + multiple types that the assignment would have + to evaluate both versions for correct diagnostics. + */ + var_obj_p = (var_id == var_obj) ? var_id : var_obj; + var_obj_p = (var_id == var_obj) ? var_id : var_obj_p; + + return 0; +} |