+2012-09-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/54559
+       * c-typeck.c (c_finish_return): Do convert to BOOLEAN_TYPE or
+       COMPLEX_TYPE with in_late_binary_op set temporarily to true.
+
 2012-08-31  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/54428
 
                                       npc, NULL_TREE, NULL_TREE, 0);
       tree res = DECL_RESULT (current_function_decl);
       tree inner;
+      bool save;
 
       current_function_returns_value = 1;
       if (t == error_mark_node)
        return NULL_TREE;
 
+      save = in_late_binary_op;
+      if (TREE_CODE (TREE_TYPE (res)) == BOOLEAN_TYPE
+          || TREE_CODE (TREE_TYPE (res)) == COMPLEX_TYPE)
+        in_late_binary_op = true;
       inner = t = convert (TREE_TYPE (res), t);
+      in_late_binary_op = save;
 
       /* Strip any conversions, additions, and subtractions, and see if
         we are returning the address of a local variable.  Warn if so.  */