From: Chandler Carruth Date: Sat, 19 Feb 2011 00:13:59 +0000 (+0000) Subject: Fix a missed case in the NULL operand to conditional operator X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7ef932429ed0edcc5e4bf44e516f5f4be6a8a03f;p=clang Fix a missed case in the NULL operand to conditional operator diagnostics. Patch by Stephen Hines. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125998 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index b78e52303e..9113f8a462 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -3141,6 +3141,10 @@ QualType Sema::CXXCheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS, if (!Composite.isNull()) return Composite; + // Check if we are using a null with a non-pointer type. + if (DiagnoseConditionalForNull(LHS, RHS, QuestionLoc)) + return QualType(); + Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS->getType() << RHS->getType() << LHS->getSourceRange() << RHS->getSourceRange(); diff --git a/test/SemaCXX/conditional-expr.cpp b/test/SemaCXX/conditional-expr.cpp index 3881765cff..5637ed14c0 100644 --- a/test/SemaCXX/conditional-expr.cpp +++ b/test/SemaCXX/conditional-expr.cpp @@ -311,10 +311,12 @@ namespace PR7598 { namespace PR9236 { #define NULL 0L void f() { + int i; (void)(true ? A() : NULL); // expected-error{{non-pointer operand type 'A' incompatible with NULL}} (void)(true ? NULL : A()); // expected-error{{non-pointer operand type 'A' incompatible with NULL}} (void)(true ? 0 : A()); // expected-error{{incompatible operand types}} (void)(true ? nullptr : A()); // expected-error{{non-pointer operand type 'A' incompatible with nullptr}} + (void)(true ? nullptr : i); // expected-error{{non-pointer operand type 'int' incompatible with nullptr}} (void)(true ? __null : A()); // expected-error{{non-pointer operand type 'A' incompatible with NULL}} (void)(true ? (void*)0 : A()); // expected-error{{incompatible operand types}} } diff --git a/test/SemaCXX/nullptr.cpp b/test/SemaCXX/nullptr.cpp index 7385fd42ad..1c454771aa 100644 --- a/test/SemaCXX/nullptr.cpp +++ b/test/SemaCXX/nullptr.cpp @@ -44,7 +44,7 @@ nullptr_t f(nullptr_t null) (void)(1 > nullptr); // expected-error {{invalid operands to binary expression}} (void)(1 != nullptr); // expected-error {{invalid operands to binary expression}} (void)(1 + nullptr); // expected-error {{invalid operands to binary expression}} - (void)(0 ? nullptr : 0); // expected-error {{incompatible operand types}} + (void)(0 ? nullptr : 0); // expected-error {{non-pointer operand type 'int' incompatible with nullptr}} (void)(0 ? nullptr : (void*)0); (void)(0 ? nullptr : A()); // expected-error {{non-pointer operand type 'A' incompatible with nullptr}} (void)(0 ? A() : nullptr); // expected-error {{non-pointer operand type 'A' incompatible with nullptr}}