Make -Wtautological-constant-out-of-range-compare behave sanely for enums with a signed fixed type.
<rdar://problem/12780159>.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169051 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index 33dcb3a..235383f 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/lib/Sema/SemaChecking.cpp
@@ -4346,7 +4346,6 @@
          && "comparison with non-integer type");
 
   bool ConstantSigned = ConstantT->isSignedIntegerType();
-  bool OtherSigned = OtherT->isSignedIntegerType();
   bool CommonSigned = CommonT->isSignedIntegerType();
 
   bool EqualityOnly = false;
@@ -4358,7 +4357,7 @@
   
   if (CommonSigned) {
     // The common type is signed, therefore no signed to unsigned conversion.
-    if (OtherSigned) {
+    if (!OtherRange.NonNegative) {
       // Check that the constant is representable in type OtherT.
       if (ConstantSigned) {
         if (OtherWidth >= Value.getMinSignedBits())
@@ -4379,10 +4378,10 @@
       }
     }
   } else {  // !CommonSigned
-    if (!OtherSigned) {
+    if (OtherRange.NonNegative) {
       if (OtherWidth >= Value.getActiveBits())
         return;
-    } else if (OtherSigned && !ConstantSigned) {
+    } else if (!OtherRange.NonNegative && !ConstantSigned) {
       // Check to see if the constant is representable in OtherT.
       if (OtherWidth > Value.getActiveBits())
         return;