From c6cb77f1e5c4455edfa9c96bf5a8ef463d4c8d54 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 23 Oct 2008 23:30:52 +0000 Subject: [PATCH] Fix regression in comparison of qualified id; == operator was being 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 | 4 +++- test/CodeGenObjC/2008-10-23-invalid-icmp.m | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test/CodeGenObjC/2008-10-23-invalid-icmp.m diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 5cc234e640..9f27f8d7cd 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -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 index 0000000000..abfe6afcc7 --- /dev/null +++ b/test/CodeGenObjC/2008-10-23-invalid-icmp.m @@ -0,0 +1,7 @@ +// RUN: clang -emit-llvm -o %t %s + +@protocol P @end + +int f0(id

d) { + return (d != ((void*) 0)); +} -- 2.40.0