OSDN Git Service

* decl.c (compute_array_index_type): Don't try to do anything with
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 May 2001 18:04:18 +0000 (18:04 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 May 2001 18:04:18 +0000 (18:04 +0000)
the indices when processing a template.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41770 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/g++.old-deja/g++.pt/array7.C [new file with mode: 0644]

index 76c301b..cb625ed 100644 (file)
@@ -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.
index 308d62f..0e8a44b 100644 (file)
@@ -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 (file)
index 0000000..02e0733
--- /dev/null
@@ -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];