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.

Reply via email to