phate / jlm

GNU Lesser General Public License v2.1
51 stars 13 forks source link

jlc segfaults #219

Open sjalander opened 1 year ago

sjalander commented 1 year ago

jlc -w 20071120-1.c

Segmentation fault (core dumped)

20071120-1.zip

sjalander commented 11 months ago

Slightly simplified example:

void attribute((noreturn)) fail () {}

typedef struct access_check {} check_gc;

typedef struct access { check_gc* access_checks; } access;

typedef struct VEC_access_base { unsigned num; access vec; } base;

access base_last (base vec) { (void)((vec && vec->num) ? 0 : (fail (), 0)); return &vec->vec; }

typedef struct gc { int base; } gc;

gc *stack;

void pop (void) { base_last(stack ? &stack->base : 0); }

Assert: jlm-opt: ./jlm/llvm/frontend/LlvmConversionContext.hpp:51: jlm::llvm::basic_block jlm::llvm::basic_block_map::get(const ::llvm::BasicBlock ) const: Assertion `has(bb)' failed.

Back trace:

7 0x000055555568e4a2 in jlm::llvm::basic_block_map::get (this=0x7fffffffdbd0, bb=0x555555a23890)

at ./jlm/llvm/frontend/LlvmConversionContext.hpp:51

8 0x000055555568ff11 in jlm::llvm::context::get (this=0x7fffffffdbc8, bb=0x555555a23890)

at ./jlm/llvm/frontend/LlvmConversionContext.hpp:162

9 0x000055555567fbb5 in jlm::llvm::patch_phi_operands (phis=std::vector of length 1, capacity 1 = {...},

ctx=...) at jlm/llvm/frontend/LlvmModuleConversion.cpp:52