Message ID | 4FA8132B.2020904@oracle.com |
---|---|
State | New |
Headers | show |
On 05/07/2012 08:23 PM, Paolo Carlini wrote: > Index: typeck.c > =================================================================== > --- typeck.c (revision 187249) > +++ typeck.c (working copy) > @@ -4782,7 +4782,11 @@ cp_truthvalue_conversion (tree expr) > return ret; > } > else > - return c_common_truthvalue_conversion (input_location, expr); > + { > + if (TREE_CODE (expr) == CALL_EXPR) > + return condition_conversion (expr); > + return c_common_truthvalue_conversion (input_location, expr); > + } > } > > /* Just like cp_truthvalue_conversion, but we want a > CLEANUP_POINT_EXPR. */ Well, not exactly like this because it recurses forever when the code is fine ;) but I think you get the idea, we don't want to unconditionally use c_common_truthvalue_conversion and we want to stop *before* trying to synthesize a NE_EXPR. About the error message proper, the locations are currently pretty wrong for these code paths - is always too advanced, at the end of the expression, I'm afraid fixing that will require touching quite a few lines of code. Paolo.
How do we even get to calling cp_truthvalue_conversion? Jason
Index: typeck.c =================================================================== --- typeck.c (revision 187249) +++ typeck.c (working copy) @@ -4782,7 +4782,11 @@ cp_truthvalue_conversion (tree expr) return ret; } else - return c_common_truthvalue_conversion (input_location, expr); + { + if (TREE_CODE (expr) == CALL_EXPR) + return condition_conversion (expr); + return c_common_truthvalue_conversion (input_location, expr); + } } /* Just like cp_truthvalue_conversion, but we want a