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
This commit is contained in:
Marc Glisse 2012-08-06 11:49:39 +02:00 committed by Paolo Carlini
parent af42f4d20b
commit ca73dc295e
4 changed files with 35 additions and 6 deletions

View File

@ -1,3 +1,10 @@
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.

View File

@ -6051,6 +6051,12 @@ build_static_cast_1 (tree type, tree expr, bool c_cast_p,
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
@ -6072,12 +6078,6 @@ build_static_cast_1 (tree type, tree expr, bool c_cast_p,
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_),

View File

@ -1,3 +1,9 @@
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.

View File

@ -0,0 +1,16 @@
// PR c++/54165
struct A
{
template<typename T>
operator T()
{
T l[];
}
};
int main()
{
A a;
(void)a;
}