r181914 - Objective-C: patch to issue the conversion
Fariborz Jahanian
fjahanian at apple.com
Wed May 15 12:03:05 PDT 2013
Author: fjahanian
Date: Wed May 15 14:03:04 2013
New Revision: 181914
URL: http://llvm.org/viewvc/llvm-project?rev=181914&view=rev
Log:
Objective-C: patch to issue the conversion
warning when property-dot syntax is used
with -Wsign-conversion. // rdar://13855394
Added:
cfe/trunk/test/SemaObjC/sign-conversion.m
Modified:
cfe/trunk/lib/Sema/SemaChecking.cpp
Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=181914&r1=181913&r2=181914&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Wed May 15 14:03:04 2013
@@ -5133,7 +5133,13 @@ void AnalyzeImplicitConversions(Sema &S,
CheckImplicitConversion(S, E, T, CC);
// Now continue drilling into this expression.
-
+
+ if (PseudoObjectExpr * POE = dyn_cast<PseudoObjectExpr>(E)) {
+ Expr *Result = POE->getResultExpr();
+ if (const OpaqueValueExpr *OVE = dyn_cast_or_null<OpaqueValueExpr>(Result))
+ return AnalyzeImplicitConversions(S, OVE->getSourceExpr(), CC);
+ }
+
// Skip past explicit casts.
if (isa<ExplicitCastExpr>(E)) {
E = cast<ExplicitCastExpr>(E)->getSubExpr()->IgnoreParenImpCasts();
Added: cfe/trunk/test/SemaObjC/sign-conversion.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/sign-conversion.m?rev=181914&view=auto
==============================================================================
--- cfe/trunk/test/SemaObjC/sign-conversion.m (added)
+++ cfe/trunk/test/SemaObjC/sign-conversion.m Wed May 15 14:03:04 2013
@@ -0,0 +1,21 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wsign-conversion %s
+// rdar://13855394
+
+ at interface NSObject
+- new;
+ at end
+
+ at interface X : NSObject
+ at property unsigned int uint;
+ at end
+
+ at implementation X
+ at synthesize uint;
+ at end
+
+void foo() {
+ X *x = [X new];
+ signed int sint = -1;
+ [x setUint:sint]; // expected-warning {{implicit conversion changes signedness: 'int' to 'unsigned int'}}
+ x.uint = sint; // expected-warning {{implicit conversion changes signedness: 'int' to 'unsigned int'}}
+}
More information about the cfe-commits
mailing list