re PR c++/48015 ([C++0x] ICE: unexpected expression 'std::min' of kind overload)

PR c++/48015
	* init.c (constant_value_1): Always require init to be TREE_CONSTANT.

From-SVN: r170770
This commit is contained in:
Jason Merrill 2011-03-08 00:28:02 -05:00 committed by Jason Merrill
parent 7ff9af9bd6
commit 8152661be6
4 changed files with 25 additions and 11 deletions

View File

@ -1,5 +1,8 @@
2011-03-07 Jason Merrill <jason@redhat.com>
PR c++/48015
* init.c (constant_value_1): Always require init to be TREE_CONSTANT.
PR c++/48008
* mangle.c (write_type): Strip cv-quals from FUNCTION_TYPE here.
(write_CV_qualifiers_for_type): Not here.

View File

@ -1760,17 +1760,15 @@ constant_value_1 (tree decl, bool integral_p)
init = TREE_VALUE (init);
if (!init
|| !TREE_TYPE (init)
|| uses_template_parms (init)
|| (integral_p
? false
: (!TREE_CONSTANT (init)
/* Do not return an aggregate constant (of which
string literals are a special case), as we do not
want to make inadvertent copies of such entities,
and we must be sure that their addresses are the
same everywhere. */
|| TREE_CODE (init) == CONSTRUCTOR
|| TREE_CODE (init) == STRING_CST)))
|| !TREE_CONSTANT (init)
|| (!integral_p
/* Do not return an aggregate constant (of which
string literals are a special case), as we do not
want to make inadvertent copies of such entities,
and we must be sure that their addresses are the
same everywhere. */
&& (TREE_CODE (init) == CONSTRUCTOR
|| TREE_CODE (init) == STRING_CST)))
break;
decl = unshare_expr (init);
}

View File

@ -1,3 +1,7 @@
2011-03-07 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/regress/non-const1.C: New.
2011-03-07 Jakub Jelinek <jakub@redhat.com>
PR debug/47991

View File

@ -0,0 +1,9 @@
// PR c++/48015
// { dg-options -std=c++0x }
template <typename T> T f(T);
template <typename T> void g()
{
int const c = f (1);
int i = c - 0;
}