]> granicus.if.org Git - clang/commitdiff
Temporary revert r221818 until all the problems
authorAnton Korobeynikov <asl@math.spbu.ru>
Wed, 12 Nov 2014 23:15:38 +0000 (23:15 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Wed, 12 Nov 2014 23:15:38 +0000 (23:15 +0000)
with objc stuff will be resolved.

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

lib/Sema/SemaExpr.cpp
lib/Sema/SemaExprCXX.cpp
test/CodeGen/complex.c
test/FixIt/format-darwin.m
test/SemaObjC/format-strings-objc.m

index 45056f49ea14bdd6bc24c5f1336280f9eefa679f..dda9d88abacfaad8bc5351a7057e12d8abcd3b69 100644 (file)
@@ -5709,7 +5709,7 @@ QualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
       RHS.get()->getType()->isVectorType())
     return CheckVectorOperands(LHS, RHS, QuestionLoc, /*isCompAssign*/false);
 
-  QualType ResTy = UsualArithmeticConversions(LHS, RHS);
+  UsualArithmeticConversions(LHS, RHS);
   if (LHS.isInvalid() || RHS.isInvalid())
     return QualType();
 
@@ -5726,12 +5726,8 @@ QualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
   
   // If both operands have arithmetic type, do the usual arithmetic conversions
   // to find a common type: C99 6.5.15p3,5.
-  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {
-    LHS = ImpCastExprToType(LHS.get(), ResTy, PrepareScalarCast(LHS, ResTy));
-    RHS = ImpCastExprToType(RHS.get(), ResTy, PrepareScalarCast(RHS, ResTy));
-
-    return ResTy;
-  }
+  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType())
+    return LHS.get()->getType();
 
   // If both operands are the same structure or union type, the result is that
   // type.
index 26ffbfb58e3b4e2b76add046043aaaa881bc3ae0..88eb41ac4484707f088605b8d4d6a65b26cddf12 100644 (file)
@@ -4561,14 +4561,10 @@ QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
   //      the usual arithmetic conversions are performed to bring them to a
   //      common type, and the result is of that type.
   if (LTy->isArithmeticType() && RTy->isArithmeticType()) {
-    QualType ResTy = UsualArithmeticConversions(LHS, RHS);
+    UsualArithmeticConversions(LHS, RHS);
     if (LHS.isInvalid() || RHS.isInvalid())
       return QualType();
-
-    LHS = ImpCastExprToType(LHS.get(), ResTy, PrepareScalarCast(LHS, ResTy));
-    RHS = ImpCastExprToType(RHS.get(), ResTy, PrepareScalarCast(RHS, ResTy));
-
-    return ResTy;
+    return LHS.get()->getType();
   }
 
   //   -- The second and third operands have pointer type, or one has pointer
index e6a55ae567d1fb21168414c80e65ad576191484f..206db253caa4586c996bf89fb24f445ce6e16ed0 100644 (file)
@@ -98,12 +98,3 @@ void t8() {
 
 const _Complex double test9const = 0;
 _Complex double test9func() { return test9const; }
-
-// D6217
-void t9() {
-  // Check for proper type promotion of conditional expression
-  char c[(int)(sizeof(typeof((0 ? 2.0f : (_Complex double) 2.0f))) - sizeof(_Complex double))];
-  // Check for proper codegen
-  (0 ? 2.0f : (_Complex double) 2.0f);
-}
-
index 1e07df7cad5631525aa1b954fb6c853a907dd6a4..170bb09fb90473d411a57261c26e19dfe0ab49e6 100644 (file)
@@ -83,12 +83,12 @@ void testParens(Foo *obj, struct Bar *record) {
   printf("%s", [obj getInteger]);  // expected-warning{{values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead}}
   printf("%s", obj.value);  // expected-warning{{values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead}}
   printf("%s", record->value);  // expected-warning{{values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead}}
-  printf("%s", (i ? i : i));  // expected-warning{{format specifies type 'char *' but the argument has type 'long'}}
+  printf("%s", (i ? i : i));  // expected-warning{{values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead}}
   printf("%s", *arr);  // expected-warning{{values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead}}
 
   // CHECK-NOT: fix-it:{{.*}}:")"
 
-  printf("%s", i ? i : i); // expected-warning{{format specifies type 'char *' but the argument has type 'long'}}
+  printf("%s", i ? i : i); // expected-warning{{values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead}}
 
   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:11-[[@LINE-2]]:13}:"%ld"
   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:16-[[@LINE-3]]:16}:"(long)("
index f4c528cc7ac04833e8289fcfb8354f7b0a5b4ad5..49567a710c3a5a1fa966613d9632d90500383c4f 100644 (file)
@@ -243,7 +243,7 @@ void testByValueObjectInFormat(Foo *obj) {
 
 // <rdar://problem/13557053>
 void testTypeOf(NSInteger dW, NSInteger dH) {
-  NSLog(@"dW %d  dH %d",({ __typeof__(dW) __a = (dW); __a < 0 ? -__a : __a; }),({ __typeof__(dH) __a = (dH); __a < 0 ? -__a : __a; })); // expected-warning 2 {{format specifies type 'int' but the argument has type 'long'}}
+  NSLog(@"dW %d  dH %d",({ __typeof__(dW) __a = (dW); __a < 0 ? -__a : __a; }),({ __typeof__(dH) __a = (dH); __a < 0 ? -__a : __a; })); // expected-warning 2 {{values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead}}
 }
 
 void testUnicode() {