From: Patrick Palka Date: Thu, 24 Mar 2016 15:59:53 +0000 (+0000) Subject: Fix PR c++/62212 (ICE during mangling of array type) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=887ab4e55402409cd7b56ad518607d05687b7ed2;p=gcc.git Fix PR c++/62212 (ICE during mangling of array type) gcc/cp/ChangeLog: PR c++/62212 * tree.c (build_cplus_array_type): Determine type-dependentess with uses_template_parms instead of with dependent_type_p. gcc/testsuite/ChangeLog: PR c++/62212 * g++.dg/template/mangle2.C: New test. From-SVN: r234457 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b32c72dac83..dbef1b206f2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2016-03-24 Patrick Palka + + PR c++/62212 + * tree.c (build_cplus_array_type): Determine type-dependentess + with uses_template_parms instead of with dependent_type_p. + 2016-03-23 Patrick Palka PR c++/70347 diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index f7849522781..5d9de344e7c 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -824,9 +824,8 @@ build_cplus_array_type (tree elt_type, tree index_type) if (elt_type == error_mark_node || index_type == error_mark_node) return error_mark_node; - bool dependent = (processing_template_decl - && (dependent_type_p (elt_type) - || (index_type && dependent_type_p (index_type)))); + bool dependent = (uses_template_parms (elt_type) + || (index_type && uses_template_parms (index_type))); if (elt_type != TYPE_MAIN_VARIANT (elt_type)) /* Start with an array of the TYPE_MAIN_VARIANT. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 99ef9f7a417..582bb8bcad0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-03-24 Patrick Palka + + PR c++/62212 + * g++.dg/template/mangle2.C: New test. + 2016-03-24 Richard Biener PR tree-optimization/70396 diff --git a/gcc/testsuite/g++.dg/template/mangle2.C b/gcc/testsuite/g++.dg/template/mangle2.C new file mode 100644 index 00000000000..50b0d9fb7da --- /dev/null +++ b/gcc/testsuite/g++.dg/template/mangle2.C @@ -0,0 +1,19 @@ +// PR c++/62212 +// { dg-do assemble } + +typedef int my_int; + +template +struct X { + enum {value = 1}; +}; + +template +void f(const my_int(&)[X::value]); + +int main() { + const my_int a[1] = {}; + f(a); +} + +// { dg-final { scan-assembler "_Z1fIvEvRAsr1XIT_E5value_Ki" } }