+2012-08-06  Marc Glisse  <marc.glisse@inria.fr>
+           Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/54165
+       * typeck.c (build_static_cast_1): Move the conversion to void case
+       before the perform_direct_initialization_if_possible call.
+
 2012-08-03  Marc Glisse  <marc.glisse@inria.fr>
 
        * pt.c (tsubst_copy_and_build): Handle VECTOR_TYPE like scalars.
 
       intype = TREE_TYPE (expr);
     }
 
+  /* [expr.static.cast]
+
+     Any expression can be explicitly converted to type cv void.  */
+  if (TREE_CODE (type) == VOID_TYPE)
+    return convert_to_void (expr, ICV_CAST, complain);
+
   /* [expr.static.cast]
 
      An expression e can be explicitly converted to a type T using a
       return result;
     }
 
-  /* [expr.static.cast]
-
-     Any expression can be explicitly converted to type cv void.  */
-  if (TREE_CODE (type) == VOID_TYPE)
-    return convert_to_void (expr, ICV_CAST, complain);
-
   /* [expr.static.cast]
 
      The inverse of any standard conversion sequence (clause _conv_),
 
+2012-08-06  Marc Glisse  <marc.glisse@inria.fr>
+           Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/54165
+       * g++.dg/conversion/void2.C: New.
+
 2012-08-06  Tom de Vries  <tom@codesourcery.com>
 
        * gcc.dg/tree-ssa/vrp78.c: New test.