OSDN Git Service

cp:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Aug 2003 09:10:29 +0000 (09:10 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Aug 2003 09:10:29 +0000 (09:10 +0000)
PR c++/11525
* parser.c (cp_parser_primary_expression): Do not set
non-constant-p merely because it is a dependent scope.
testsuite:
PR c++/11525
* g++.dg/parse/constant4.C: New test.

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

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/constant4.C [new file with mode: 0644]

index 8c2e6a3..1bc4fed 100644 (file)
@@ -1,5 +1,9 @@
 2003-08-01  Nathan Sidwell  <nathan@codesourcery.com>
 
+       PR c++/11525
+       * parser.c (cp_parser_primary_expression): Do not set
+       non-constant-p merely because it is a dependent scope.
+
        PR c++/9447
        * decl2.c (do_class_using_decl): Set type to NULL_TREE.
        * semantics.c (finish_expr_stmt): Do not convert to void in a
index 64d260d..c4b40b2 100644 (file)
@@ -2394,11 +2394,6 @@ cp_parser_primary_expression (cp_parser *parser,
              {
                if (TYPE_P (TREE_OPERAND (decl, 0)))
                  *qualifying_class = TREE_OPERAND (decl, 0);
-               /* Since this name was dependent, the expression isn't
-                  constant -- yet.  No error is issued because it
-                  might be constant when things are instantiated.  */
-               if (parser->constant_expression_p)
-                 parser->non_constant_expression_p = true;
                return decl;
              }
            /* Check to see if DECL is a local variable in a context
index 57e9802..f78f24e 100644 (file)
@@ -1,5 +1,8 @@
 2003-08-01  Nathan Sidwell  <nathan@codesourcery.com>
 
+       PR c++/11525
+       * g++.dg/parse/constant4.C: New test.
+
        PR c++/9447
        * g++.dg/template/using5.C: New test.
 
diff --git a/gcc/testsuite/g++.dg/parse/constant4.C b/gcc/testsuite/g++.dg/parse/constant4.C
new file mode 100644 (file)
index 0000000..65c84d9
--- /dev/null
@@ -0,0 +1,40 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 31 Jul 2003 <nathan@codesourcery.com>
+
+// PR c++/11525 incorrect error about non-constant initalizer
+
+template<typename> class X;
+template<unsigned> class Y {};
+
+
+template<typename T>
+void Foo ()
+{
+  static const unsigned I = X<T>::I;
+  
+  Y<I> i;
+  
+  static const unsigned J = X<T>::J;
+  
+  Y<J> j; // { dg-error "non-constant" "" }
+}
+
+struct A 
+{
+  operator unsigned () const;
+};
+
+template <typename> struct X 
+{
+  enum {I};
+  static A const J;
+};
+
+void Baz ()
+{
+  Foo<int> (); // { dg-error "instantiated" "" }
+}
+
+