OSDN Git Service

authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Mar 1998 16:13:12 +0000 (16:13 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Mar 1998 16:13:12 +0000 (16:13 +0000)
* tree.c (mapcar): When dealing with a DECL, use it's constant
value, if any.
* pt.c (lookup_template_class): Don't mangle the names of template
classes whose arguments are unknown.
* pt.c (tsubst_expr): Handle GOTO_STMT correctly.

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

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

index 2e44007..7685f48 100644 (file)
@@ -2827,7 +2827,7 @@ lookup_template_class (d1, arglist, in_decl, context)
 
       /* We need to set this again after CLASSTYPE_TEMPLATE_INFO is set up.  */
       DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t)) = id;
-      /* if (! uses_template_parms (arglist)) */
+      if (! uses_template_parms (arglist))
        DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t)) 
          = get_identifier (build_overload_name (t, 1, 1));
 
@@ -5077,8 +5077,13 @@ tsubst_expr (t, args, in_decl)
 
     case GOTO_STMT:
       lineno = TREE_COMPLEXITY (t);
-      finish_goto_stmt (tsubst_expr (GOTO_DESTINATION (t),
-                                    args, in_decl));
+      t = GOTO_DESTINATION (t);
+      if (TREE_CODE (t) != IDENTIFIER_NODE)
+       /* Computed goto's must be tsubst'd into.  On the other hand,
+          non-computed gotos must not be; the identifier in question
+          will have no binding.  */
+       t = tsubst_expr (t, args, in_decl);
+      finish_goto_stmt (t);
       break;
 
     case ASM_STMT:
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/goto.C b/gcc/testsuite/g++.old-deja/g++.pt/goto.C
new file mode 100644 (file)
index 0000000..c6c1a56
--- /dev/null
@@ -0,0 +1,12 @@
+// Build don't link:
+
+template<class T>
+void compute(T) {
+    goto Exit;
+Exit: ;
+    }
+
+int main() 
+{
+  compute(0);
+}