diff options
author | Chris Lattner <sabre@nondot.org> | 2008-01-06 22:50:31 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-01-06 22:50:31 +0000 |
commit | bd57d36b5dbb2d02bf878458646d6fd666f54de1 (patch) | |
tree | 6c532fae1b7c41ceb0844d543562a0f0b6ff6d3d | |
parent | 70d67a91fe280239f2586eac055232ec21448d88 (diff) |
rearrange some code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45666 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Sema/SemaExpr.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp index dcbfe78a41..71d1b60e14 100644 --- a/Sema/SemaExpr.cpp +++ b/Sema/SemaExpr.cpp @@ -789,16 +789,8 @@ inline QualType Sema::CheckConditionalOperands( // C99 6.5.15 if (lexT->isVoidType() && rexT->isVoidType()) return lexT.getUnqualifiedType(); - // C99 6.5.15p6 - "if one operand is a null pointer constant, the result has - // the type of the other operand." - if (lexT->isPointerType() && rex->isNullPointerConstant(Context)) { - promoteExprToType(rex, lexT); // promote the null to a pointer. - return lexT; - } - if (rexT->isPointerType() && lex->isNullPointerConstant(Context)) { - promoteExprToType(lex, rexT); // promote the null to a pointer. - return rexT; - } + // Handle the case where both operands are pointers before we handle null + // pointer constants in case both operands are null pointer constants. if (const PointerType *LHSPT = lexT->getAsPointerType()) { // C99 6.5.15p3,6 if (const PointerType *RHSPT = rexT->getAsPointerType()) { // get the "pointed to" types @@ -825,10 +817,23 @@ inline QualType Sema::CheckConditionalOperands( // C99 6.5.15 // differently qualified versions of compatible types, the result type is // a pointer to an appropriately qualified version of the *composite* // type. - return lexT; // FIXME: Need to return the composite type. + // FIXME: Need to return the composite type. + return lexT; } } + // C99 6.5.15p6 - "if one operand is a null pointer constant, the result has + // the type of the other operand." + if (lexT->isPointerType() && rex->isNullPointerConstant(Context)) { + promoteExprToType(rex, lexT); // promote the null to a pointer. + return lexT; + } + + if (rexT->isPointerType() && lex->isNullPointerConstant(Context)) { + promoteExprToType(lex, rexT); // promote the null to a pointer. + return rexT; + } + // Otherwise, the operands are not compatible. Diag(questionLoc, diag::err_typecheck_cond_incompatible_operands, lexT.getAsString(), rexT.getAsString(), |