In gcc/objc/: 2010-09-28 Nicola Pero <nicola.pero@meta-innovation.com>

In gcc/objc/:
2010-09-28  Nicola Pero  <nicola.pero@meta-innovation.com>

        Merge from 'apple/trunk' branch on FSF servers.

        2005-07-18  Ziemowit Laski  <zlaski@apple.com>

        Radar 4175534
        * objc-act.c (objc_compare_types): A new silent comparison
        mode (-4), differing from regular comparison (-3) in that
        'false' is returned instead of issuing warnings.

In gcc/testsuite/:
2010-09-28  Nicola Pero  <nicola.pero@meta-innovation.com>

        Merge from 'apple/trunk' branch on FSF servers.

        2005-07-18  Ziemowit Laski  <zlaski@apple.com>

        Radar 4175534
        * obj-c++.dg/method-22.mm: New.

From-SVN: r164681
This commit is contained in:
Nicola Pero 2010-09-28 10:20:11 +00:00 committed by Nicola Pero
parent 06e67e167d
commit 4c11650506
4 changed files with 75 additions and 4 deletions

View File

@ -1,3 +1,14 @@
2010-09-28 Nicola Pero <nicola.pero@meta-innovation.com>
Merge from 'apple/trunk' branch on FSF servers.
2005-07-18 Ziemowit Laski <zlaski@apple.com>
Radar 4175534
* objc-act.c (objc_compare_types): A new silent comparison
mode (-4), differing from regular comparison (-3) in that
'false' is returned instead of issuing warnings.
2010-09-28 Nicola Pero <nicola.pero@meta-innovation.com> 2010-09-28 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-act.c (encode_type): Do not add 'r' with the next runtime. * objc-act.c (encode_type): Do not add 'r' with the next runtime.

View File

@ -1143,7 +1143,9 @@ objc_common_type (tree type1, tree type2)
0 Return value; 0 Return value;
-1 Assignment; -1 Assignment;
-2 Initialization; -2 Initialization;
-3 Comparison (LTYP and RTYP may match in either direction). */ -3 Comparison (LTYP and RTYP may match in either direction);
-4 Silent comparison (for C++ overload resolution).
*/
bool bool
objc_compare_types (tree ltyp, tree rtyp, int argno, tree callee) objc_compare_types (tree ltyp, tree rtyp, int argno, tree callee)
@ -1198,8 +1200,9 @@ objc_compare_types (tree ltyp, tree rtyp, int argno, tree callee)
&& !TYPE_HAS_OBJC_INFO (rtyp)) && !TYPE_HAS_OBJC_INFO (rtyp))
return false; return false;
/* Past this point, we are committed to returning 'true' to the caller. /* Past this point, we are committed to returning 'true' to the caller
However, we can still warn about type and/or protocol mismatches. */ (unless performing a silent comparison; see below). However, we can
still warn about type and/or protocol mismatches. */
if (TYPE_HAS_OBJC_INFO (ltyp)) if (TYPE_HAS_OBJC_INFO (ltyp))
{ {
@ -1253,7 +1256,7 @@ objc_compare_types (tree ltyp, tree rtyp, int argno, tree callee)
if (!pointers_compatible) if (!pointers_compatible)
pointers_compatible = DERIVED_FROM_P (ltyp, rtyp); pointers_compatible = DERIVED_FROM_P (ltyp, rtyp);
if (!pointers_compatible && argno == -3) if (!pointers_compatible && argno <= -3)
pointers_compatible = DERIVED_FROM_P (rtyp, ltyp); pointers_compatible = DERIVED_FROM_P (rtyp, ltyp);
} }
@ -1271,11 +1274,17 @@ objc_compare_types (tree ltyp, tree rtyp, int argno, tree callee)
if (!pointers_compatible) if (!pointers_compatible)
{ {
/* The two pointers are not exactly compatible. Issue a warning, unless
we are performing a silent comparison, in which case return 'false'
instead. */
/* NB: For the time being, we shall make our warnings look like their /* NB: For the time being, we shall make our warnings look like their
C counterparts. In the future, we may wish to make them more C counterparts. In the future, we may wish to make them more
ObjC-specific. */ ObjC-specific. */
switch (argno) switch (argno)
{ {
case -4:
return false;
case -3: case -3:
warning (0, "comparison of distinct Objective-C types lacks a cast"); warning (0, "comparison of distinct Objective-C types lacks a cast");
break; break;

View File

@ -1,3 +1,12 @@
2010-09-28 Nicola Pero <nicola.pero@meta-innovation.com>
Merge from 'apple/trunk' branch on FSF servers.
2005-07-18 Ziemowit Laski <zlaski@apple.com>
Radar 4175534
* obj-c++.dg/method-22.mm: New.
2010-09-27 Jason Merrill <jason@redhat.com> 2010-09-27 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/rv-lvalue-req.C: New. * g++.dg/cpp0x/rv-lvalue-req.C: New.

View File

@ -0,0 +1,42 @@
/* Ensure that overload resolution does not produce warnings as
side-effects. */
/* { dg-do run } */
#include "../objc-obj-c++-shared/Object1.h"
#include <stdlib.h>
#define CHECK_IF(E) if(!(E)) abort ()
@interface MyCursor: Object
+ (MyCursor *)crosshairCursor;
@end
@class MyImage;
class A {
public:
A();
int foo(MyImage *);
int foo(MyCursor *);
};
A::A() {}
int A::foo(MyCursor * c) { return 17; }
int A::foo(MyImage * i) { return 29; }
@implementation MyCursor
+ (MyCursor *)crosshairCursor {
return self;
}
@end
int main(void) {
A a;
int r = a.foo([MyCursor crosshairCursor]);
CHECK_IF (r == 17);
return 0;
}