+ /* Adjust the parameter names and locations. */
+ parm = DECL_ARGUMENTS (fn);
+ clone_parm = DECL_ARGUMENTS (clone);
+ if (DECL_HAS_IN_CHARGE_PARM_P (fn))
+ parm = TREE_CHAIN (parm);
+ if (DECL_HAS_VTT_PARM_P (fn))
+ parm = TREE_CHAIN (parm);
+ if (DECL_HAS_VTT_PARM_P (clone))
+ clone_parm = TREE_CHAIN (clone_parm);
+ for (; parm;
+ parm = TREE_CHAIN (parm), clone_parm = TREE_CHAIN (clone_parm))
+ {
+ DECL_ABSTRACT_ORIGIN (clone_parm) = parm;
+
+ /* The name may have changed from the declaration. */
+ DECL_NAME (clone_parm) = DECL_NAME (parm);
+ DECL_SOURCE_FILE (clone_parm) = DECL_SOURCE_FILE (parm);
+ DECL_SOURCE_LINE (clone_parm) = DECL_SOURCE_LINE (parm);
+
+ /* We should only give unused information for one clone. */
+ if (!first)
+ TREE_USED (clone_parm) = 1;
+ }
+