]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
strub: add note on attribute access
authorAlexandre Oliva <oliva@adacore.com>
Mon, 11 Dec 2023 18:09:13 +0000 (15:09 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Mon, 11 Dec 2023 18:09:13 +0000 (15:09 -0300)
Document why attribute access doesn't need the same treatment as fn
spec, and check that the assumption behind it holds.

for  gcc/ChangeLog

* ipa-strub.cc (pass_ipa_strub::execute): Check that we don't
add indirection to pointer parameters, and document attribute
access non-interactions.

gcc/ipa-strub.cc

index 2afb7a455751d3f6e956ed50741ae89651896f1d..8ec6824e8a802fa9753fd7ce45f97293b4c811da 100644 (file)
@@ -2889,6 +2889,13 @@ pass_ipa_strub::execute (function *)
                && (tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (nparm)))
                    <= 4 * UNITS_PER_WORD))))
        {
+         /* No point in indirecting pointer types.  Presumably they
+            won't ever pass the size-based test above, but check the
+            assumption here, because getting this wrong would mess
+            with attribute access and possibly others.  We deal with
+            fn spec below.  */
+         gcc_checking_assert (!POINTER_TYPE_P (TREE_TYPE (nparm)));
+
          indirect_nparms.add (nparm);
 
          /* ??? Is there any case in which it is not safe to suggest the parms
@@ -2976,7 +2983,9 @@ pass_ipa_strub::execute (function *)
                }
            }
 
-       /* ??? Maybe we could adjust it instead.  */
+       /* ??? Maybe we could adjust it instead.  Note we don't need
+          to mess with attribute access: pointer-typed parameters are
+          not modified, so they can remain unchanged.  */
        if (drop_fnspec)
          remove_named_attribute_unsharing ("fn spec",
                                            &TYPE_ATTRIBUTES (nftype));