https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101854

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[11/12 Regression] Invalid  |[11 Regression] Invalid
                   |warning -Wstringop-overflow |warning -Wstringop-overflow
                   |wrong argument              |wrong argument
      Known to fail|                            |11.2.0

--- Comment #9 from Martin Sebor <msebor at gcc dot gnu.org> ---
Fixed for GCC 12.  The patch is far too intrusive to backport but the following
should fix the problem in GCC 11:

diff --git a/gcc/calls.c b/gcc/calls.c
index fcb0d6dec69..f116923c890 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2295,14 +2295,15 @@ initialize_argument_information (int num_actuals
ATTRIBUTE_UNUSED,
         operand for later processing.  */
       if (attr_access *access = rdwr_idx.get (argpos))
        {
+         int idx = i - !!struct_value_addr_value;
          if (POINTER_TYPE_P (type))
            {
-             access->ptr = args[i].tree_value;
+             access->ptr = args[idx].tree_value;
              // A nonnull ACCESS->SIZE contains VLA bounds.  */
            }
          else
            {
-             access->size = args[i].tree_value;
+             access->size = args[idx].tree_value;
              gcc_assert (access->ptr == NULL_TREE);
            }
        }

Reply via email to