summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-02 18:04:18 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-02 18:04:18 +0000
commitdb4f24e2e16dee1e27f8114e2966bf5af5dfe0ad (patch)
tree2ce95d7eb645836e91c85fc664e62f305180d0d0
parent3a4dde99d5d5addd6933d438201b49e6c1131f65 (diff)
downloadgcc-db4f24e2e16dee1e27f8114e2966bf5af5dfe0ad.tar.gz
* decl.c (compute_array_index_type): Don't try to do anything with
the indices when processing a template. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41770 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c12
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/array7.C11
3 files changed, 22 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 76c301be6a7..cb625edc3cf 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2001-05-02 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (compute_array_index_type): Don't try to do anything with
+ the indices when processing a template.
+
2001-05-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* call.c: NULL_PTR -> NULL.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 308d62f66e8..0e8a44bc70c 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -9224,12 +9224,6 @@ compute_array_index_type (name, size)
{
tree itype;
- /* The size might be the result of a cast. */
- STRIP_TYPE_NOPS (size);
-
- /* It might be a const variable or enumeration constant. */
- size = decl_constant_value (size);
-
/* If this involves a template parameter, it will be a constant at
instantiation time, but we don't know what the value is yet.
Even if no template parameters are involved, we may an expression
@@ -9252,6 +9246,12 @@ compute_array_index_type (name, size)
size, integer_one_node));
}
+ /* The size might be the result of a cast. */
+ STRIP_TYPE_NOPS (size);
+
+ /* It might be a const variable or enumeration constant. */
+ size = decl_constant_value (size);
+
/* The array bound must be an integer type. */
if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
&& TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/array7.C b/gcc/testsuite/g++.old-deja/g++.pt/array7.C
new file mode 100644
index 00000000000..02e0733b91b
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/array7.C
@@ -0,0 +1,11 @@
+// Build don't link:
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+template <typename T>
+struct S {
+ enum E { e = 5 };
+ static int i[e];
+};
+
+template <typename T>
+int S<T>::i[S<T>::e];