Commit ca73dc29 by Marc Glisse Committed by Paolo Carlini

re PR c++/54165 (Cast to "void" should not implicitly call conversion functions)

/cp
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.

/testsuite
2012-08-06  Marc Glisse  <marc.glisse@inria.fr>
	    Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/54165
	* g++.dg/conversion/void2.C: New.

Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com>

From-SVN: r190175
parent af42f4d2
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.
......
......@@ -6053,6 +6053,12 @@ build_static_cast_1 (tree type, tree expr, bool c_cast_p,
/* [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
static_cast of the form static_cast<T>(e) if the declaration T
t(e);" is well-formed, for some invented temporary variable
......@@ -6074,12 +6080,6 @@ build_static_cast_1 (tree type, tree expr, bool c_cast_p,
/* [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_),
other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
(_conv.array_), function-to-pointer (_conv.func_), and boolean
......
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.
......
// PR c++/54165
struct A
{
template<typename T>
operator T()
{
T l[];
}
};
int main()
{
A a;
(void)a;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment