On Mon, Feb 03, 2025 at 01:04:08PM +0000, Alfie Richards wrote: > > The `record` argument in maybe_version_function was intended to allow > controlling recording the relationship of versions. However, it only > exercised this if both input funcitons were already marked as versioned, > and this same logic is repeated in maybe_version_function itself so the > argument is unecessary.
I think this commit message is inaccurate, but it's quite confusing to me. How about the following instead: Previously, the `record` argument in maybe_version_function allowed the call to cgraph_node::record_function_versions to be skipped. However, this was only skipped when both decls were already marked as versioned, in which case we will now trigger the early exit in record_function_versions instead. The patch otherwise looks fine to me. > > gcc/cp/ChangeLog: > > * class.cc (add_method): Remove argument. > * cp-tree.h (maybe_version_functions): Ditto. > * decl.cc (decls_match): Ditto. > (maybe_version_functions): Ditto. > --- > gcc/cp/class.cc | 2 +- > gcc/cp/cp-tree.h | 2 +- > gcc/cp/decl.cc | 9 +++------ > 3 files changed, 5 insertions(+), 8 deletions(-) > > diff --git a/gcc/cp/class.cc b/gcc/cp/class.cc > index f2f81a44718..a9a80d1b4be 100644 > --- a/gcc/cp/class.cc > +++ b/gcc/cp/class.cc > @@ -1402,7 +1402,7 @@ add_method (tree type, tree method, bool via_using) > /* If these are versions of the same function, process and > move on. */ > if (TREE_CODE (fn) == FUNCTION_DECL > - && maybe_version_functions (method, fn, true)) > + && maybe_version_functions (method, fn)) > continue; > > if (DECL_INHERITED_CTOR (method)) > diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h > index ec976928f5f..8eba8d455be 100644 > --- a/gcc/cp/cp-tree.h > +++ b/gcc/cp/cp-tree.h > @@ -7114,7 +7114,7 @@ extern void determine_local_discriminator (tree, > tree = NULL_TREE); > extern bool member_like_constrained_friend_p (tree); > extern bool fns_correspond (tree, tree); > extern int decls_match (tree, tree, bool = > true); > -extern bool maybe_version_functions (tree, tree, bool); > +extern bool maybe_version_functions (tree, tree); > extern bool validate_constexpr_redeclaration (tree, tree); > extern bool merge_default_template_args (tree, tree, bool); > extern tree duplicate_decls (tree, tree, > diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc > index cf5e055e146..3b3b4481964 100644 > --- a/gcc/cp/decl.cc > +++ b/gcc/cp/decl.cc > @@ -1215,9 +1215,7 @@ decls_match (tree newdecl, tree olddecl, bool > record_versions /* = true */) > && targetm.target_option.function_versions (newdecl, olddecl)) > { > if (record_versions) > - maybe_version_functions (newdecl, olddecl, > - (!DECL_FUNCTION_VERSIONED (newdecl) > - || !DECL_FUNCTION_VERSIONED (olddecl))); > + maybe_version_functions (newdecl, olddecl); > return 0; > } > } > @@ -1288,7 +1286,7 @@ maybe_mark_function_versioned (tree decl) > If RECORD is set to true, record function versions. */ > > bool > -maybe_version_functions (tree newdecl, tree olddecl, bool record) > +maybe_version_functions (tree newdecl, tree olddecl) > { > if (!targetm.target_option.function_versions (newdecl, olddecl)) > return false; > @@ -1311,8 +1309,7 @@ maybe_version_functions (tree newdecl, tree olddecl, > bool record) > maybe_mark_function_versioned (newdecl); > } > > - if (record) > - cgraph_node::record_function_versions (olddecl, newdecl); > + cgraph_node::record_function_versions (olddecl, newdecl); > > return true; > }