diff options
author | Chris Lattner <sabre@nondot.org> | 2009-12-05 05:40:13 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-12-05 05:40:13 +0000 |
commit | 02dd4b1e279114cc51422fab8b42a7759421800e (patch) | |
tree | e3df6fa816f6f92bd8287a3ceeef612257f45ed6 | |
parent | 378fe06b93752669d8a7dd8fa7000094b9679267 (diff) |
fix rdar://7446395, a crash on invalid, by fixing a broken assertion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90647 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 7 | ||||
-rw-r--r-- | test/Sema/exprs.c | 2 |
2 files changed, 5 insertions, 4 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index da1fe3d44d..bb040b2ee4 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -5014,6 +5014,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, unsigned OpaqueOpc, bool isRelational) { BinaryOperator::Opcode Opc = (BinaryOperator::Opcode)OpaqueOpc; + // Handle vector comparisons separately. if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) return CheckVectorCompareOperands(lex, rex, Loc, isRelational); @@ -5091,17 +5092,15 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, } // The result of comparisons is 'bool' in C++, 'int' in C. - QualType ResultTy = getLangOptions().CPlusPlus? Context.BoolTy :Context.IntTy; + QualType ResultTy = getLangOptions().CPlusPlus ? Context.BoolTy:Context.IntTy; if (isRelational) { if (lType->isRealType() && rType->isRealType()) return ResultTy; } else { // Check for comparisons of floating point operands using != and ==. - if (lType->isFloatingType()) { - assert(rType->isFloatingType()); + if (lType->isFloatingType() && rType->isFloatingType()) CheckFloatComparison(Loc,lex,rex); - } if (lType->isArithmeticType() && rType->isArithmeticType()) return ResultTy; diff --git a/test/Sema/exprs.c b/test/Sema/exprs.c index 299b0a267d..10fcde6e75 100644 --- a/test/Sema/exprs.c +++ b/test/Sema/exprs.c @@ -111,4 +111,6 @@ test15_t test15(void) { return (test15_t)0 + (test15_t)0; // expected-error {{invalid operands to binary expression ('test15_t' (aka 'unsigned long *') and 'test15_t')}} } +// rdar://7446395 +void test16(float x) { x == ((void*) 0); } // expected-error {{invalid operands to binary expression}} |