https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82174
Bug ID: 82174 Summary: Null name in one entry of the builtin_data array of jit-builtins.c Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: jit Assignee: dmalcolm at gcc dot gnu.org Reporter: mcree at orcon dot net.nz Target Milestone: --- I see a segmentation violation in some code calling libgccjit. The backtrace is: Program terminated with signal SIGSEGV, Segmentation fault. #0 pp_format(pretty_printer*, text_info*) () at ../../gcc.git/gcc/pretty-print.c:317 317 output_buffer *buffer = pp_buffer (pp); (gdb) bt #0 pp_format(pretty_printer*, text_info*) () at ../../gcc.git/gcc/pretty-print.c:317 #1 0x00007fef3c1fc698 in diagnostic_report_diagnostic(diagnostic_context*, diagnostic_info*) () at ../../gcc.git/gcc/diagnostic.c:974 #2 0x00007fef3c1fc99e in diagnostic_impl (richloc=richloc@entry=0x7fff20ffec20, opt=opt@entry=-1, gmsgid=gmsgid@entry=0x7fef3c6e88d7 "in %s, at %s:%d", ap=ap@entry=0x7fff20ffec08, kind=kind@entry=DK_ICE) at ../../gcc.git/gcc/diagnostic.c:1099 #3 0x00007fef3c1fd63d in internal_error (gmsgid=gmsgid@entry=0x7fef3c6e88d7 "in %s, at %s:%d") at ../../gcc.git/gcc/diagnostic.c:1422 #4 0x00007fef3b631a49 in fancy_abort ( file=file@entry=0x7fef3c29aea0 "../../gcc.git/gcc/jit/jit-builtins.c", line=line@entry=71, function=function@entry=0x7fef3c29ec80 <gcc::jit::matches_builtin(char const*, gcc::jit::builtin_data const&)::__FUNCTION__> "matches_builtin") at ../../gcc.git/gcc/diagnostic.c:1488 #5 0x00007fef3b38c6d8 in gcc::jit::matches_builtin (bd=..., bd=..., in_name=0x434b21 "__builtin_ia32_orps256") at ../../gcc.git/gcc/jit/jit-builtins.c:71 #6 gcc::jit::find_builtin_by_name (out_id=<synthetic pointer>, in_name=0x434b21 "__builtin_ia32_orps256") at ../../gcc.git/gcc/jit/jit-builtins.c:118 #7 gcc::jit::builtins_manager::get_builtin_function (this=0x2619850, name=0x434b21 "__builtin_ia32_orps256") at ../../gcc.git/gcc/jit/jit-builtins.c:150 #8 0x00007fef3b644019 in gcc_jit_context_get_builtin_function (ctxt=0x25d2ac0, name=name@entry=0x434b21 "__builtin_ia32_orps256") at ../../gcc.git/gcc/jit/libgccjit.c:917 #9 0x0000000000417bfd in ip_be_avx2_fdecls (be=be@entry=0x643820 <ip_avx2>) at intel-avx2.c:201 #10 0x00000000004143d7 in ip_init_jit () at jit.c:892 #11 0x000000000040a0ac in time_ip_init_jit () at arith-test.c:231 #12 run_im_ii_tests (operator=operator@entry=0, size=size@entry=..., chk_flag=112) at arith-test.c:505 #13 0x000000000040594a in main (argc=<optimized out>, argv=<optimized out>) at arith-test.c:616 Stepping up to #6 find_builtin_by_name() finds that the loop counter i is: (gdb) print i $2 = 1092 but the entries about i in the builtin_data array are: (gdb) print builtin_data[1091] $5 = {name = 0x7fef3c2a3964 "__builtin__ITM_RfWE", fnclass = BUILT_IN_NORMAL, type = gcc::jit::BT_FN_LDOUBLE_VPTR, both_p = false, fallback_p = true, attr = gcc::jit::ATTR_TM_PURE_TMPURE_NOTHROW_LIST, implicit_p = false} (gdb) print builtin_data[1092] $6 = {name = 0x0, fnclass = BUILT_IN_NORMAL, type = gcc::jit::BT_LAST, both_p = false, fallback_p = false, attr = gcc::jit::ATTR_LAST, implicit_p = false} (gdb) print builtin_data[1093] $7 = {name = 0x7fef3c2a3978 "__builtin___asan_init", fnclass = BUILT_IN_NORMAL, type = gcc::jit::BT_FN_VOID, both_p = true, fallback_p = true, attr = gcc::jit::ATTR_NOTHROW_LEAF_LIST, implicit_p = true} and it's clear that the name in entry 1092 is NULL, which eventually leads to a failed insert and the segfault. The size of the array is 46752 and each entry has 32 bytes thus the code is expecting 1461 entries in the array.