]> granicus.if.org Git - clang/commitdiff
Objective-C: patch to issue the conversion
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 15 May 2013 19:03:04 +0000 (19:03 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 15 May 2013 19:03:04 +0000 (19:03 +0000)
warning when property-dot syntax is used
with -Wsign-conversion. // rdar://13855394

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181914 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaChecking.cpp
test/SemaObjC/sign-conversion.m [new file with mode: 0644]

index a0998a46c66656f5a5558886b1af00d29aee00f8..e8d84f604ebbe9be0af71590e83ed54d4b109418 100644 (file)
@@ -5133,7 +5133,13 @@ void AnalyzeImplicitConversions(Sema &S, Expr *OrigE, SourceLocation CC) {
     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();
diff --git a/test/SemaObjC/sign-conversion.m b/test/SemaObjC/sign-conversion.m
new file mode 100644 (file)
index 0000000..65609e9
--- /dev/null
@@ -0,0 +1,21 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wsign-conversion %s
+// rdar://13855394
+
+@interface NSObject
+- new;
+@end
+
+@interface X : NSObject
+@property unsigned int uint;
+@end
+
+@implementation X 
+@synthesize uint;
+@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'}}
+}