decl.c (grokdeclarator): Don't presume DECL_LANG_SPECIFIC indicates anything special...
authorNathan Sidwell <nathan@codesourcery.com>
Tue, 23 Jan 2001 10:44:18 +0000 (10:44 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 23 Jan 2001 10:44:18 +0000 (10:44 +0000)
cp:
* decl.c (grokdeclarator): Don't presume DECL_LANG_SPECIFIC
indicates anything special about template depth. Make sure we
only count the user visible template classes.
testsuite:
* g++.old-deja/g++.pt/spec37.C: New test.

From-SVN: r39198

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

index f5b46ff6400cb6354cfd275f2372b71be0a3a91b..166d0c1c5737f9977dd01a5f626658b426587764 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-23  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * decl.c (grokdeclarator): Don't presume DECL_LANG_SPECIFIC
+       indicates anything special about template depth. Make sure we
+       only count the user visible template classes.
+
 2001-01-23  Nathan Sidwell  <nathan@codesourcery.com>
 
        * call.c (build_conv): Typo in comment.
index 158407ccf3a76090c5303f856017ef5e0f1caefd..6fcf9c4d2c2b1acc455863cf3ae9a6914ab43879 100644 (file)
@@ -10807,14 +10807,12 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
                   the definition of `S<int>::f'.  */
                if (CLASSTYPE_TEMPLATE_INFO (t)
                    && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
-                       || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
+                       || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
+                   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
                  template_count += 1;
 
                t = TYPE_MAIN_DECL (t);
-               if (DECL_LANG_SPECIFIC (t))
-                 t = DECL_CONTEXT (t);
-               else
-                 t = NULL_TREE;
+               t = DECL_CONTEXT (t);
              }
 
            if (sname == NULL_TREE)
index 31f25fb58c559e233e4149f920e341fa0b980203..649f327a497a2147004bbb6b34e69c561d961881 100644 (file)
@@ -1,3 +1,7 @@
+2001-01-23  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * g++.old-deja/g++.pt/spec37.C: New test.
+
 2001-01-23  Nathan Sidwell  <nathan@codesourcery.com>
 
        * g++.old-deja/g++.pt/overload14.C: New test.
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/spec37.C b/gcc/testsuite/g++.old-deja/g++.pt/spec37.C
new file mode 100644 (file)
index 0000000..5578c30
--- /dev/null
@@ -0,0 +1,25 @@
+// Build don't link:
+// 
+// Copyright (C) 2000 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 21 Jan 2001 <nathan@codesourcery.com>
+
+// Bug 1728. We started sorting things when there were 7 fields. Our
+// template_count algorithm was rather fragile ...
+
+template <int dim> struct X
+{
+  struct Y
+  {
+    int x1;
+    int x2;
+    int x3;
+    int x4;
+    int x5;
+    int x6;
+    int x7;
+
+    void Foo ();
+  };
+};
+
+template <> void X<1>::Y::Foo () {}