[cfe-commits] r56096 - in /cfe/trunk: lib/Sema/SemaStmt.cpp test/SemaCXX/condition.cpp
Argiris Kirtzidis
akyrtzi at gmail.com
Thu Sep 11 12:09:35 PDT 2008
CheckCXXBooleanCondition follows the convention of other check functions
(CheckInitializerTypes, CheckSingleInitializer, CheckCastTypes, etc)
which is that it doesn't just receive the expression to check, but a
reference to it so that it can replace it with another expression as
needed. It replaces the given Expr node with an implicit cast expr node,
and returns false if it was successful. If it can't convert to bool and
a diagnostic was emitted, it returns true (works similar to the other
check functions).
-Argiris
Neil Booth wrote:
> Argiris Kirtzidis wrote:-
>
>
>> Author: akirtzidis
>> Date: Thu Sep 11 00:16:22 2008
>> New Revision: 56096
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=56096&view=rev
>> Log:
>> Do implicit conversion to bool for the condition in a do-while statement.
>>
>> Modified:
>> cfe/trunk/lib/Sema/SemaStmt.cpp
>> cfe/trunk/test/SemaCXX/condition.cpp
>>
>> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=56096&r1=56095&r2=56096&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Thu Sep 11 00:16:22 2008
>> @@ -530,7 +530,10 @@
>> DefaultFunctionArrayConversion(condExpr);
>> QualType condType = condExpr->getType();
>>
>> - if (!condType->isScalarType()) // C99 6.8.5p2
>> + if (getLangOptions().CPlusPlus) {
>> + if (CheckCXXBooleanCondition(condExpr)) // C++ 6.4p4
>> + return true;
>> + } else if (!condType->isScalarType()) // C99 6.8.5p2
>> return Diag(DoLoc, diag::err_typecheck_statement_requires_scalar,
>> condType.getAsString(), condExpr->getSourceRange());
>>
>
> Isn't this just checking the conversion is OK, but not doing it?
>
> Neil.
>
>
More information about the cfe-commits
mailing list