diff options
author | Jason Merrill <jason@redhat.com> | 2012-09-13 11:13:24 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-09-13 11:13:24 -0400 |
commit | 7c8233ce846dd7f68992b0bbfafae87fb46b83ab (patch) | |
tree | 484ac0663eeec9388f8a32a415395efdffee7f76 /gcc | |
parent | c915f8bca422b3e7f76c9e2e87667c516627c728 (diff) | |
download | gcc-7c8233ce846dd7f68992b0bbfafae87fb46b83ab.zip gcc-7c8233ce846dd7f68992b0bbfafae87fb46b83ab.tar.gz gcc-7c8233ce846dd7f68992b0bbfafae87fb46b83ab.tar.bz2 |
re PR c++/53836 (ICE: unexpected expression of kind template_parm_index)
PR c++/53836
* pt.c (value_dependent_expression_p): A TREE_LIST initializer must
be dependent.
From-SVN: r191261
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/init10.C | 15 |
4 files changed, 33 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bd62046..b7d8a1d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-09-13 Jason Merrill <jason@redhat.com> + + PR c++/53836 + * pt.c (value_dependent_expression_p): A TREE_LIST initializer must + be dependent. + 2012-09-10 Paolo Carlini <paolo.carlini@oracle.com> PR c++/54541 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 768f141..4cf2ed8 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -19199,10 +19199,15 @@ value_dependent_expression_p (tree expression) case VAR_DECL: /* A constant with literal type and is initialized - with an expression that is value-dependent. */ + with an expression that is value-dependent. + + Note that a non-dependent parenthesized initializer will have + already been replaced with its constant value, so if we see + a TREE_LIST it must be dependent. */ if (DECL_INITIAL (expression) && decl_constant_var_p (expression) - && value_dependent_expression_p (DECL_INITIAL (expression))) + && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST + || value_dependent_expression_p (DECL_INITIAL (expression)))) return true; return false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d6c6e23..debdd88 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-09-13 Jason Merrill <jason@redhat.com> + + PR c++/53836 + * g++.dg/template/init10.C: New. + 2012-09-13 Tobias Burnus <burnus@net-b.de> PR fortran/54556 diff --git a/gcc/testsuite/g++.dg/template/init10.C b/gcc/testsuite/g++.dg/template/init10.C new file mode 100644 index 0000000..1480622 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/init10.C @@ -0,0 +1,15 @@ +template <int N> +struct A { }; + +template <int Q> +void g() +{ + const int M ( Q ); + + A<M> a; +} + +void h() +{ + g<3>(); +} |