mangle.c (mangle_decl_string): Make sure we don't try to mangle templates.
authorJason Merrill <jason@redhat.com>
Sat, 28 May 2011 00:53:58 +0000 (20:53 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sat, 28 May 2011 00:53:58 +0000 (20:53 -0400)
* mangle.c (mangle_decl_string): Make sure we don't try to mangle
templates.

From-SVN: r174376

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/mangle.c

index 3419d518ffbe7c731362990f3de88d807ab7b98b..269e0d1e60f7b96fffc192159d189bdf80f82973 100644 (file)
@@ -1,5 +1,8 @@
 2011-05-27  Jason Merrill  <jason@redhat.com>
 
+       * mangle.c (mangle_decl_string): Make sure we don't try to mangle
+       templates.
+
        PR c++/47049
        * semantics.c (maybe_add_lambda_conv_op): Fix COMDAT sharing.
        * decl.c (start_preparsed_function): Don't call comdat_linkage for
index 8fe32592c5fb78134e375aca823101b60d386d44..232b5cf12f3fefc14e45e1eab35c224a27857f68 100644 (file)
@@ -12664,7 +12664,9 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
                        compiler-generated functions.  */
                     && !DECL_ARTIFICIAL (decl1));
 
-  if (DECL_INTERFACE_KNOWN (decl1))
+  if (processing_template_decl)
+    /* Don't mess with interface flags.  */;
+  else if (DECL_INTERFACE_KNOWN (decl1))
     {
       tree ctx = decl_function_context (decl1);
 
@@ -12672,7 +12674,6 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
        DECL_EXTERNAL (decl1) = 0;
 
       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
-         && !processing_template_decl
          && TREE_PUBLIC (ctx))
        /* This is a function in a local class in an extern inline
           function.  */
@@ -12684,8 +12685,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
   else if (!finfo->interface_unknown && honor_interface)
     {
       if (DECL_DECLARED_INLINE_P (decl1)
-         || DECL_TEMPLATE_INSTANTIATION (decl1)
-         || processing_template_decl)
+         || DECL_TEMPLATE_INSTANTIATION (decl1))
        {
          DECL_EXTERNAL (decl1)
            = (finfo->interface_only
index 27ef374597eddb2c33786cc6d2cf17ed4a907bec..7ecfefb3b804f87758efdb2ade7147da1ed55343 100644 (file)
@@ -3095,6 +3095,9 @@ mangle_decl_string (const tree decl)
   tree saved_fn = NULL_TREE;
   bool template_p = false;
 
+  /* We shouldn't be trying to mangle an uninstantiated template.  */
+  gcc_assert (!type_dependent_expression_p (decl));
+
   if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
     {
       struct tinst_level *tl = current_instantiation ();