<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/113488>113488</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            riscv64 apparent miscompilation causing segfault
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          bscarlet
      </td>
    </tr>
</table>

<pre>
    The following program segfaults for me when compiled and run:

```
#include <cstdarg>

struct Foo {
 char *buf0;
  char *buf1;
};

void (*x)(Foo *);

static void x_impl(Foo *) {}

void vfoo(char *buf0, const char *, va_list ap) {
  char buf1[80];

  Foo f{.buf0 = buf0, .buf1 = buf1};

  x = x_impl;

  va_list ap2;
  va_copy(ap2, ap);
  x(&f);
 va_end(ap2);
}

void foo(const char *format, ...) {
  va_list ap;
  va_start(ap, format);

  char buffer[4096];
  vfoo(buffer, format, ap);

  va_end(ap);
}

int main(int argc, char **argv) {
  foo("");
  return 0;
}
```

Using
`clang ... -O1 -mrvv-vector-bits=512 -target riscv64-unknown-linux -march=rv64gcv1p0 ...`

(... includes flags I don't think are relevant, like paths about my environment etc, and - among other things - examining the output assembly)

This problem started for me at the merge of 
https://github.com/llvm/llvm-project/pull/110809

This tarball contains the source above, and the assembly I get with and without the problem.
[riscv-varargs-crash.tgz](https://github.com/user-attachments/files/17497474/riscv-varargs-crash.tgz)

The differences in the assembly do look to me like probably results of the above merge. 

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVU1vqzgX_jXO5ogIDASyYNHevJHu6t3cWVcHcwBPjY1sQ9v59SM7oU3SmSuNhMAc-3w8z_kwOicHTdSw8pmVpx0ufjS2aZ1Aq8jvWtN9NL9Ggt4oZd6kHmC2ZrA4gaOhx0V5B72xMBG8jaRBmGmWijpA3YFdNMufWHpi6fY-pNfn8stzqYVaOgKW_xDOd2gHlv_vVsV5uwgPZ2OAVc8XGYgRLTD-1C59yvJNeivOPsWsOn2t43s1sgPGa8af3hk_Ml5H6_wp_NwfdR69FBA13l_kNKu70zGk6vTN-Nobw3h9Fyb_AcJo5z-jDJIVX5R0HnDerN1CiTjK5zpl5SMGiIz0rHreB-vA8hNsboIk2yTZd_wA73H3Cuhx8ysmfsPtii_CzB-M10HOf1xCvjnwHhk99HfSFV9Id5vS8S4pj6RdObvjqDd2Qh9B7fcPFN1wdxem82h9dBn0NguPmf2iuCfLyuciPR5uaYYtidcTN6Yesd_43sD-BqvUHiaUmvE6LNEOItbGZ1U8oR3WB6yXUBjn8bml3ZJfrIb0H9w9NFt8_-GkHj73hUI9BGoh-X8GyWTXNVlJeGOTVnrH8lOZcUg82oE8WOnEeiiSRb9q86YTJfXyDsmEVowsP9n1UAxizeY0JuveL-N1cHNtdwe9wsHBT-iMZrzy4EepXwEtgSVFK-rIs5KvBDP60QG2ZvEwfQDpVVqjJ9IeyEfuwrBJACejBzB-JBvNDQ4SoHecpA6Dy48EZvHz4gGdo6lVH4HJmxh_jdKF-dYqmiBWEXXbdEMfDUxkBwLTw0Vj9H52YcbxM-PnQfpxaffCTIyflVq3TzJb8ycJz_h5XpRi_JxlaZ1-9-3RtqhUmBMepXbRpTOLFRTwr7SBDfINBPyEkJw36ce4FxaBqnDmCmZ_9VQ-xxQmK1q0g0uERTfu_fBXKHxe_wbN4sgm6D2KMRDvGD_3UlH4ZlVxrIqqYPz8b9YfaSboZGgq0oIcSH2PpzOgjHkFbwLxlxKwpsWwZ8nFO8f0F51AyiUp-2tKdl2Td8f8iDtqsoofq4zXh3I3Njytq_5QZkXHD31_bMs0rcu86Io0p7rFbCcbnvIiS3meHYuqKPaiqNtUYH081G2OXcGKlCaUah-Sujd22EnnFmqyLC_qeqewJeXiVcq5pjeIu6Fhy9PONrES2mVwrEjD3HJfZrz0ipprewHOM9pQ3ZN0l_sUvTQaBC6heT9v3t1iVfOfKzAGFfN2iXpt-N8BAAD__0fMZfE">