]> granicus.if.org Git - clang/commitdiff
Fix regression in comparison of qualified id; == operator was being
authorDaniel Dunbar <daniel@zuster.org>
Thu, 23 Oct 2008 23:30:52 +0000 (23:30 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 23 Oct 2008 23:30:52 +0000 (23:30 +0000)
created with LHS and RHS whose types didn't match.

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

lib/Sema/SemaExpr.cpp
test/CodeGenObjC/2008-10-23-invalid-icmp.m [new file with mode: 0644]

index 5cc234e64036d11fe65ca07afe901f7476697b7d..9f27f8d7cd0e3af75bc73dc2a82ac0ac084f2cc7 100644 (file)
@@ -2153,6 +2153,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation loc,
       Diag(loc, diag::ext_typecheck_comparison_of_distinct_pointers,
            lType.getAsString(), rType.getAsString(),
            lex->getSourceRange(), rex->getSourceRange());
+      ImpCastExprToType(rex, lType);
       return Context.IntTy;
     }
     if (ObjCQualifiedIdTypesAreCompatible(lType, rType, true)) {
@@ -2161,8 +2162,9 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation loc,
     } else {
       if ((lType->isObjCQualifiedIdType() && rType->isObjCQualifiedIdType())) {
         Diag(loc, diag::warn_incompatible_qualified_id_operands, 
-             lex->getType().getAsString(), rex->getType().getAsString(),
+             lType.getAsString(), rType.getAsString(),
              lex->getSourceRange(), rex->getSourceRange());
+        ImpCastExprToType(rex, lType);
         return Context.IntTy;
       }
     }
diff --git a/test/CodeGenObjC/2008-10-23-invalid-icmp.m b/test/CodeGenObjC/2008-10-23-invalid-icmp.m
new file mode 100644 (file)
index 0000000..abfe6af
--- /dev/null
@@ -0,0 +1,7 @@
+// RUN: clang -emit-llvm -o %t %s
+
+@protocol P @end
+
+int f0(id<P> d) {
+  return (d != ((void*) 0));
+}