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

--- Comment #18 from Kito Cheng <kito at gcc dot gnu.org> ---
Just another smaller testcase to reproduce, and seem we hit a GC issue which
need to fix first...:

empty.c
---
void foo();

int main(){
    foo();
}
---

vector.c
---
#include <riscv_vector.h>
uint8_t *x;
void foo () {
   int vl = __riscv_vsetvl_e8m8 (100);
   vint8m8_t a = __riscv_vle8_v_i8m8 (x, 100);
}

---


Step to reproduce:
---
$ riscv64-unknown-linux-gnu-gcc empty.c -flto -c -march=rv64gc
$ riscv64-unknown-linux-gnu-gcc vector.c -flto -c -march=rv64gcv
$ riscv64-unknown-linux-gnu-gcc empty.o vector.o -flto -o vector -march=rv64gc
during RTL pass: expand
vector.c: In function 'foo':
vector.c:4:13: internal compiler error: Segmentation fault
    4 |    int vl = __riscv_vsetvl_e8m8 (100);
      |             ^
0x421b9f0 internal_error(char const*, ...)
       
../../../../riscv-gnu-toolchain-trunk-dev/gcc/gcc/diagnostic-global-context.cc:517
0x1bcf4a3 crash_signal
        ../../../../riscv-gnu-toolchain-trunk-dev/gcc/gcc/toplev.cc:321
0x7326b0e4251f ???
        ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0x234a0a2 riscv_vector::function_call_info::function_returns_void_p()
       
../../../../riscv-gnu-toolchain-trunk-dev/gcc/gcc/config/riscv/riscv-vector-builtins.h:448
0x2346206
riscv_vector::function_expander::function_expander(riscv_vector::function_instance
const&, tree_node*, tree_node*, rtx_def*)
       
../../../../riscv-gnu-toolchain-trunk-dev/gcc/gcc/config/riscv/riscv-vector-builtins.cc:4547
0x2349a6a riscv_vector::expand_builtin(unsigned int, tree_node*, rtx_def*)
       
../../../../riscv-gnu-toolchain-trunk-dev/gcc/gcc/config/riscv/riscv-vector-builtins.cc:5415
0x22f6aa6 riscv_expand_builtin(tree_node*, rtx_def*, rtx_def*, machine_mode,
int)
----



GDB log:
----
#7  0x000000000234a0a3 in
riscv_vector::function_call_info::function_returns_void_p (this=0x7fffffffc0d0)
    at
../../../../riscv-gnu-toolchain-trunk-dev/gcc/gcc/config/riscv/riscv-vector-builtins.h:448
448       return TREE_TYPE (TREE_TYPE (fndecl)) == void_type_node;
(gdb) call debug(fndecl)
 <ggc_freed 0x7ffff77a9300>
----

Reply via email to