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

    <tr>
        <th>Summary</th>
        <td>
            libunwind's unwind_scalable_vectors.pass.cpp test fails on RV64
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libunwind
      </td>
    </tr>

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

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

<pre>
    `ninja check-unwind` on a RV64 host and a recentish Clang HEAD results in:

```
FAIL: llvm-libunwind-shared.cfg.in :: unwind_scalable_vectors.pass.cpp (7 of 13)
******************** TEST 'llvm-libunwind-shared.cfg.in :: unwind_scalable_vectors.pass.cpp' FAILED ********************
Script:
--
: 'COMPILED WITH'; /home/asb/llvm-project/build/release/./bin/clang++ /home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp --target=riscv64-unknown-linux-gnu -nostdinc++ -I /home/asb/llvm-project/libunwind/include -funwind-tables -std=c++2b -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-c++11-extensions -Wno-noexcept-type -Wno-atomic-alignment -Wno-user-defined-literals -Wno-tautological-compare -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_DISABLE_AVAILABILITY -fcoroutines-ts -Werror=thread-safety -Wuser-defined-warnings  -L /home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu -Wl,-rpath,/home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu -lunwind -ldl -Wl,--export-dynamic -o /home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir/t.tmp.exe
: 'EXECUTED AS';  /usr/bin/python3.10 /home/asb/llvm-project/libunwind/../libcxx/utils/run.py --execdir /home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir -- /home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir/t.tmp.exe
--
Exit Code: 1

Command Output (stdout):
--
$ ":" "COMPILED WITH"
$ "/home/asb/llvm-project/build/release/./bin/clang++" "/home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp" "--target=riscv64-unknown-linux-gnu" "-nostdinc++" "-I" "/home/asb/llvm-project/libunwind/include" "-funwind-tables" "-std=c++2b" "-Werror" "-Wall" "-Wctad-maybe-unsupported" "-Wextra" "-Wshadow" "-Wundef" "-Wno-unused-command-line-argument" "-Wno-attributes" "-Wno-pessimizing-move" "-Wno-c++11-extensions" "-Wno-noexcept-type" "-Wno-atomic-alignment" "-Wno-user-defined-literals" "-Wno-tautological-compare" "-Wsign-compare" "-Wunused-variable" "-Wunused-parameter" "-Wunreachable-code" "-Wno-unused-local-typedef" "-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER" "-D_LIBCPP_DISABLE_AVAILABILITY" "-fcoroutines-ts" "-Werror=thread-safety" "-Wuser-defined-warnings" "-L" "/home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu" "-Wl,-rpath,/home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu" "-lunwind" "-ldl" "-Wl,--export-dynamic" "-o" "/home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir/t.tmp.exe"
# command stderr:
/home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp:27:12: error: starting new .cfi frame before finishing the previous one
 "mv s0, ra\n"
           ^
<inline asm>:2:1: note: instantiated into assembly here
mv s0, ra
^
error: this directive must appear between .cfi_startproc and .cfi_endproc directives
2 errors generated.

error: command failed with exit status: 1

--
```
Below is the generated .s. The problem is not at all obvious to me, so I hope the original patch author and reviewers might have some insight (@skachkov-sc, @kito-cheng, @MaskRay). Thanks in advance.

```
        .text
        .attribute      4, 16
        .attribute      5, "rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0"
        .file   "unwind_scalable_vectors.pass.cpp"
        .globl  stepper # -- Begin function stepper
        .p2align        1
        .type   stepper,@function
stepper: # @stepper
        .cfi_startproc
# %bb.0: # %entry
        addi    sp, sp, -2032
        .cfi_def_cfa_offset 2032
        sd      ra, 2024(sp)                    # 8-byte Folded Spill
        sd      s0, 2016(sp)                    # 8-byte Folded Spill
        .cfi_offset ra, -8
        .cfi_offset s0, -16
        addi    s0, sp, 2032
        .cfi_def_cfa s0, 0
        addi    sp, sp, -784
        addi    a0, s0, -2048
        addi    a0, a0, -744
        lui     a1, 1
        sub     a1, s0, a1
        sd      a0, 1288(a1)                    # 8-byte Folded Spill
        call    unw_getcontext@plt
        lui     a0, 1
        sub     a0, s0, a0
        ld      a1, 1288(a0)                    # 8-byte Folded Reload
        addi    a0, s0, -1456
        lui     a2, 1
        sub     a2, s0, a2
        sd      a0, 1296(a2)                    # 8-byte Folded Spill
        call    unw_init_local@plt
 # kill: def $x11 killed $x10
        lui     a0, 1
        sub     a0, s0, a0
        ld      a0, 1296(a0)                    # 8-byte Folded Reload
        call    unw_step@plt
        mv      a1, a0
        li      a0, 0
        bge     a0, a1, .LBB0_2
        j       .LBB0_1
.LBB0_1:                                # %cond.true
        j       .LBB0_3
.LBB0_2:                                # %cond.false
.Lpcrel_hi0:
        auipc   a0, %pcrel_hi(.L.str)
        addi    a0, a0, %pcrel_lo(.Lpcrel_hi0)
.Lpcrel_hi1:
        auipc   a1, %pcrel_hi(.L.str.1)
        addi    a1, a1, %pcrel_lo(.Lpcrel_hi1)
.Lpcrel_hi2:
        auipc   a2, %pcrel_hi(.L__PRETTY_FUNCTION__.stepper)
        addi    a3, a2, %pcrel_lo(.Lpcrel_hi2)
        li      a2, 45
        call    __assert_fail@plt
.LBB0_3:                                # %cond.end
        addi    a0, s0, -1456
        call    unw_step@plt
        mv      a1, a0
        li      a0, 0
        bge     a0, a1, .LBB0_5
        j       .LBB0_4
.LBB0_4: # %cond.true5
        j       .LBB0_6
.LBB0_5: # %cond.false6
.Lpcrel_hi3:
        auipc   a0, %pcrel_hi(.L.str)
        addi    a0, a0, %pcrel_lo(.Lpcrel_hi3)
.Lpcrel_hi4:
        auipc   a1, %pcrel_hi(.L.str.1)
        addi    a1, a1, %pcrel_lo(.Lpcrel_hi4)
.Lpcrel_hi5:
        auipc   a2, %pcrel_hi(.L__PRETTY_FUNCTION__.stepper)
        addi    a3, a2, %pcrel_lo(.Lpcrel_hi5)
        li      a2, 47
        call    __assert_fail@plt
.LBB0_6:                                # %cond.end7
        addi    sp, sp, 784
        ld      ra, 2024(sp)                    # 8-byte Folded Reload
        ld      s0, 2016(sp)                    # 8-byte Folded Reload
        addi    sp, sp, 2032
        ret
.Lfunc_end0:
        .size   stepper, .Lfunc_end0-stepper
        .cfi_endproc
 # -- End function
        .globl  main                            # -- Begin function main
        .p2align        1
        .type   main,@function
main: # @main
        .cfi_startproc
# %bb.0: # %entry
        addi    sp, sp, -16
        .cfi_def_cfa_offset 16
        sd      ra, 8(sp)                       # 8-byte Folded Spill
        sd      s0, 0(sp)                       # 8-byte Folded Spill
        .cfi_offset ra, -8
        .cfi_offset s0, -16
        addi    s0, sp, 16
        .cfi_def_cfa s0, 0
        call    _ZL3foov
        li      a0, 0
        ld      ra, 8(sp)                       # 8-byte Folded Reload
        ld      s0, 0(sp) # 8-byte Folded Reload
        addi    sp, sp, 16
        ret
.Lfunc_end1:
        .size   main, .Lfunc_end1-main
        .cfi_endproc
 # -- End function
        .p2align        1                               # -- Begin function _ZL3foov
        .type   _ZL3foov,@function
_ZL3foov: # @_ZL3foov
        .cfi_startproc
# %bb.0: # %entry
        #APP
        mv      s0, ra
        csrr    s1, vlenb
        sub     sp, sp, s1
        # .cfi_def_cfa_expression sp + vlenb
        .cfi_escape 0x0f, 0x07, 0x72, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x22

        call    stepper
        add     sp, sp, s1
        mv      ra, s0
        ret
        .cfi_endproc

        #NO_APP
.Lfunc_end2:
        .size   _ZL3foov, .Lfunc_end2-_ZL3foov
                                        # -- End function
        .type   .L.str,@object                  # @.str
        .section        .rodata.str1.1,"aMS",@progbits,1
.L.str:
        .asciz  "unw_step(&cursor) > 0"
        .size   .L.str, 22

        .type   .L.str.1,@object # @.str.1
.L.str.1:
        .asciz  "/home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp"
        .size   .L.str.1, 71

        .type   .L__PRETTY_FUNCTION__.stepper,@object # @__PRETTY_FUNCTION__.stepper
.L__PRETTY_FUNCTION__.stepper:
        .asciz  "void stepper()"
        .size   .L__PRETTY_FUNCTION__.stepper, 15

        .section        ".linker-options","e",@llvm_linker_options
        .ident  "clang version 16.0.0 (https://github.com/llvm/llvm-project/ 6a9933519dd94e48b59d07c7333dac37186734d0)"
        .section        ".note.GNU-stack","",@progbits
        .addrsig
        .addrsig_sym unw_getcontext
        .addrsig_sym unw_init_local
        .addrsig_sym unw_step
        .addrsig_sym __assert_fail
        .addrsig_sym _ZL3foov
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWllT47gW_jXiRWWXLTuLH3gIIcxQRS_VMMOd--KSrZNEjSO5JDmE-fW35N2JoVm6Z25XV0DS0dmPviMFqjXfCIBzNLlAk8szWpitVOdUJ2eJZE_naOoJLr5TnG4hfXAK8cgFQ1MPS4Ep_vbnNMRbqQ2mgmGKFaQgDNdbvMyo2ODfV4tLrEAXmdGYCxQskHeJvOZz6tX_y-HV4voGBQucZfudk_GkkuXoLVXA3HS9cbnAlkWwwNVarFOa0SSDeA-pkUq7OdXaTfMcIzKfYbnGfoBIVIsj7_-P71a3dxiR2c9QDpEZtsauLvFHdKqsuk0Vz03rWcepjQ0WVt3ll09fS0H313e_IzJDwQVG5Gord4DIFdUJIlelSbmS3yE1iFwlBc8YIlcKMqDakrl2lgtErlIbVUQuEPkhm9ZHiFwZ0Hbqh0FzHEPVBgwKLhXX6X4aOoV4EPJROBkXxcHZiAI7QmrDuEhrPZzrt6jCRZoVDLCzriNorCoaO9owFFzWTEmCnXtQSirs3NMsw859aihzdvQpAacQushzqQwwS3YwimLnXm8pk4_YuS8EgzV27oV0ClFoYE4qdzsqmDUCHKo2xQ6EqSioMYonhbEq2HEOWvMd_5uLjbOTe6hma7V834GDAaG5FDW9kHBIITeOecqhYSl3PHVoxjeiE1RoUA6DNRdgFTGgaFbzMLQwMpMbntLM6ppTZVnZg6E3rG3ZU8Wty7qZnCq6AwOqnFJA060lcFLJYOCGTFoBVtHSQZfxzfXF8uvX-PfFbfz5S_z12-K3T4v49q_bu9Wn2B4dq289qsvr28XFzSpe_Lm4vllcXN9c3_2FnXUqlSwMF6Ado5uooeDSbBVQ5mi6BvNkNevb_0iV4GKjMXZu3lcPGbekL2TpfYbI0lE5NVtElr9GRlblMHYyljUSHTjY1HTYk6A7nmJHvt1AVQjDd6B7vzoJF3b8pTB58ZpidhlXtvRds8tdOMDgWFr9Z7X84251iRe39aFklSy0ak-a_MlspQhc33tLdbu129LDwfIzPKttcPMnbF0DKePq33MIdpz_p2g0YLE6cIOXkoENj9-H6GV1cuFKkEVVbZi0IqNTyCEhRoTYeULsb0fgQ4ZkPwWFakk_H4tqxq9BpIZ0iEvN7PXbVawxquEwRKpm9givmun6_GtGNMva38cRrNtocawdVWjWDktMa0c_QLY-XYdv_dljlOuvjWFdf32AeENRQ9wbqDuGfn2CMQzsnNFDwp5LBnh4PN-iYm9hiI0j7hwgZLP-Gpw8oR1DyzahBph5lDlHyNlpP4afzerN65L8XTDXavDLAbWRlDWVWA9ZNtThCGKbRfleJ_ySA747bgNcVynWhoFS3S3s55-awcLC-cK3KIDrhFpgbagyXGywgEfspmuO17Y4cAJrqQCvueB6a9fNFnCuYM9lobEUNUxZp-72WHuILLGiaLIUrXm4-4cmq6bJWHJhTyRM9Q4FK6uVVcqqIqQpUY4LbagwnNomngsjMdUadkn2hLegasF9oRXnRkRrmtlyjRlXkBq-B7wr7F04z4EqnIB5BBClwXHpglzJtLwpl1MgWDnR7tYVb1I5TuMNCFBWQbcPya3oJqpryjNg-JGbLQaL5NpQU-gTLG9xenjtvoBMPmKuS-e3IrGrXXxXhkMmGewsgZAGU4PtfUgmVYyMxDaBllhLfI23MoeSjVR8wwXNcE5NusXVo0JpuQ0uPILSeMc3W4O3dA9Yyx3YiJQziMxR6OkHmm4f5N7RqWWPQu-BG-mkW7DQX058ovrhG31CJLKaUvGgMReYsj0VKbgvPDQgL3INHEw3alEKeVFo2fvT8cVJKZsQtZ-GnORevLMf1H6s7QezHynJva7-vMhd88xuRoS8ou3otm0ymWTIi7SBPAfbtga2gbyADRd4XYjUcClwvdpty0kJgciL_J69FixbVvYADb2GRUXVLJUdemAdfMJ5kMjd8YLIJElcr91JJiCMemr3Uca4lZ2XiVJ-OsQLyJAxg3Wcrmks12sNBg8INENeZLuTJSYeCW0bmiMS4ZF_VoO5kzwZwFcyY8Dwbc6zbMiqqmri-dOPsCrVrtWtlHPmo4uVOKeXVI1LvM4lz3qk3u696M_ZPDxepxVzr_Z3OB8nqD6dWdgxyIpy2S8rofNckbSzFVfqD91asfLJfI7I3BK-y62pbVq9qBCP8QZMKkVZq6GXZ-ZYQ29Uw57dtPNaxjqbag29V2v4DTJJ2Yse9sPJ9Fg_Mqof6elHxj0Y2cS0hB_1IBfcxGVb2fdgyeHBbgkWmMEaIxIefL-cAlaNvI87e2DMu53ds8aeSEeZsNu3Ye3L7zTuJpMNdFlf7nBvLi68uIvBd1t65VxtZzMIFmOqH5uByCSVgrlGFTDCM-jzJG_kuaaZhoZBnirI4i33ei_qES14nrYGIjJpqBCZuzeuNqp7Ch89A9otmSy3dFKafd2cPyrZf06y64_J9rtIPCfbH5FNRmWTMdlx_PXb6u7ur_jqj8_Lu-svn-PYbTHwVKGgrskXFCL9fVlX5eHkOGHj2LaUysS2QetnbZMNb0sAEG84f355zUxG8jvsmxf22oG2KMZ2Tfu7Jse7yrSfHmdA8I_kfTCSe-E_lPfhiOzJv5n3k-fyfvbGvJ--Pe9nL7U-_c4n-0ifeAQ72UcaxfF-oa_2oN1T0LrINuX2ajg42l3N_x6277hH6Yw26vX1sgf4joNX9r44aPv7F40d5eJHYTm9gNhdr7t9lJQjV49yvrt3DBn-xEtH_1Y3cuXoLfcuHPOXIv-2C4f3QVY_98LxjDdOrhtNWf_3JlhLuX8ZL7KPOO75Cuw8955a61k6Umn-WKXVqdorM985zcs31FivLl4qsWer7MT9TVG1CyOF1a51xXXK550Fhkiw-Pp12FMcvZZ5UaqVsvMl1u0zEMnR_aEfJu33meNBicIhV6B1-eCRY0QujrhV4dApzQF7B29dJs3Bm1U_Z6QeV8l0iOoxrX8G8-F69wozrIHjg5Yy9rwNpUeqUtDeaQKO5lDfAZ-_xK2DuzQkY9nay4FexhJnGOwf5N1xAo7ncZ11TWNlc04m3yE143xQ6JWEncZQM4xcJRk11C77tk9aIkLop9vyBd2yzZXcJNxoRJbtbazk1XcA1Sn_u31bq5pdMkdkmhZKS1WeGMEKD9_jaq-1NuCTeA_NrLRrDe3Z5Q40c_3ndPslX1A-Y1CpLZ75z5r0YnN4audL5LXxL5E845G95Kx9u7QRi8YtellZ7E-OzewSDBHiZlw8gHJkburvEas8gzbLbCTiiipuqFpenIEwFafyS2e8B1WeQf7U9VwPIzLfGpPr8jvvK0SuNtxsi8RN5a4O8mms8ZRGURBM_IixKIRwnkwi5s3SWRAEjKbBzJ9PZ0HIvBOXDAwT0oD72-c_HG1o-tAadlo9nfMZU5pvTiZi_bTDR69tz9L03pOepSmLcHR1eDUYJxniU_Nyf8bOAxYFET2Dc386mwRBOAujs-05m6_Xc5iTyEs84kUsSaJJmLDp1GN0RlI44-fEI4FHPOJ74SSM3JSwabAOZiSBNfG8EIUe7CjPXBsoV6rNGde6gPOpF87IWUYTyHT555GE9OqUoMnlmTovg5sUG21TiWujOy6GmwzOe1tm-sd_t2irv_xGR2Mpyr-vPCtUdv7mLCtN0IhclVb8LwAA__9clDOl">