From 6f2a9fa0f787d3023b643496e8c321bdb7a85fa0 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 15 May 2013 19:03:04 +0000 Subject: [PATCH] Objective-C: patch to issue the conversion 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 | 8 +++++++- test/SemaObjC/sign-conversion.m | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 test/SemaObjC/sign-conversion.m diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index a0998a46c6..e8d84f604e 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -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(E)) { + Expr *Result = POE->getResultExpr(); + if (const OpaqueValueExpr *OVE = dyn_cast_or_null(Result)) + return AnalyzeImplicitConversions(S, OVE->getSourceExpr(), CC); + } + // Skip past explicit casts. if (isa(E)) { E = cast(E)->getSubExpr()->IgnoreParenImpCasts(); diff --git a/test/SemaObjC/sign-conversion.m b/test/SemaObjC/sign-conversion.m new file mode 100644 index 0000000000..65609e9352 --- /dev/null +++ b/test/SemaObjC/sign-conversion.m @@ -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'}} +} -- 2.50.1