diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-03-21 19:08:42 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-03-21 19:08:42 +0000 |
commit | 413e064b4556650aa9faed7e3fe5379f9fc3a999 (patch) | |
tree | b327176de01b76897183f63f7e8df30f74b3ccea | |
parent | 0f366ac3afb601d9183dff2a587b4c5872fafb91 (diff) | |
download | bcm5719-llvm-413e064b4556650aa9faed7e3fe5379f9fc3a999.tar.gz bcm5719-llvm-413e064b4556650aa9faed7e3fe5379f9fc3a999.zip |
Fix an objc++ diagnostic initializing objc pointers.
// rdar:// 9139947
llvm-svn: 128013
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 14 | ||||
-rw-r--r-- | clang/test/SemaObjCXX/objc-pointer-conv.mm | 2 | ||||
-rw-r--r-- | clang/test/SemaObjCXX/overload.mm | 4 |
3 files changed, 13 insertions, 7 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 8ceeff95364..8fa2a5d2e86 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -2153,10 +2153,16 @@ Sema::PerformImplicitConversion(Expr *&From, QualType ToType, case ICK_Pointer_Conversion: { if (SCS.IncompatibleObjC && Action != AA_Casting) { // Diagnose incompatible Objective-C conversions - Diag(From->getSourceRange().getBegin(), - diag::ext_typecheck_convert_incompatible_pointer) - << From->getType() << ToType << Action - << From->getSourceRange(); + if (Action == AA_Initializing) + Diag(From->getSourceRange().getBegin(), + diag::ext_typecheck_convert_incompatible_pointer) + << ToType << From->getType() << Action + << From->getSourceRange(); + else + Diag(From->getSourceRange().getBegin(), + diag::ext_typecheck_convert_incompatible_pointer) + << From->getType() << ToType << Action + << From->getSourceRange(); } CastKind Kind = CK_Invalid; diff --git a/clang/test/SemaObjCXX/objc-pointer-conv.mm b/clang/test/SemaObjCXX/objc-pointer-conv.mm index 209dcfdfd70..6f59de17947 100644 --- a/clang/test/SemaObjCXX/objc-pointer-conv.mm +++ b/clang/test/SemaObjCXX/objc-pointer-conv.mm @@ -43,6 +43,6 @@ void accept_derived(DerivedFromI*); void test_base_to_derived(I* i) { accept_derived(i); // expected-warning{{incompatible pointer types passing 'I *' to parameter of type 'DerivedFromI *'}} - DerivedFromI *di = i; // expected-warning{{incompatible pointer types initializing 'I *' with an expression of type 'DerivedFromI *'}} + DerivedFromI *di = i; // expected-warning{{incompatible pointer types initializing 'DerivedFromI *' with an expression of type 'I *'}} DerivedFromI *di2 = (DerivedFromI *)i; } diff --git a/clang/test/SemaObjCXX/overload.mm b/clang/test/SemaObjCXX/overload.mm index 7e79a4249cb..a40248e6cd2 100644 --- a/clang/test/SemaObjCXX/overload.mm +++ b/clang/test/SemaObjCXX/overload.mm @@ -51,12 +51,12 @@ void test0(A* a, B* b, id val) { } void test1(A* a) { - B* b = a; // expected-warning{{incompatible pointer types initializing 'A *' with an expression of type 'B *'}} + B* b = a; // expected-warning{{incompatible pointer types initializing 'B *' with an expression of type 'A *'}} B *c; c = a; // expected-warning{{incompatible pointer types assigning to 'A *' from 'B *'}} } void test2(A** ap) { - B** bp = ap; // expected-warning{{incompatible pointer types initializing 'A **' with an expression of type 'B **'}} + B** bp = ap; // expected-warning{{incompatible pointer types initializing 'B **' with an expression of type 'A **'}} bp = ap; // expected-warning{{incompatible pointer types assigning to 'A **' from 'B **'}} } |