Hi all, yesterday I've found an interesting bug in libgccjit. Seems we have an hard limitation of 200 characters for literal strings. Attempting to create longer strings lead to ICE during pass_expand while performing a sanity check in get_constant_size. Tracking down the issue seems the code we have was inspired from c-family/c-common.c:c_common_nodes_and_builtins were array_domain_type is actually defined with a size of 200. The comment that follows that point sounded premonitory :) :) /* Make a type for arrays of characters. With luck nothing will ever really depend on the length of this array type. */ At least in the current implementation the type is set by fix_string_type were the actual string length is taken in account. I attach a patch updating the logic accordingly and a new testcase for that. make check-jit is passing clean. Best Regards Andrea gcc/jit/ChangeLog 2019-??-?? Andrea Corallo * jit-playback.h (gcc::jit::recording::context m_recording_ctxt): Remove m_char_array_type_node field. * jit-playback.c (playback::context::context) Remove m_char_array_type_node from member initializer list. (playback::context::new_string_literal) Fix logic to handle string length > 200. gcc/testsuite/ChangeLog 2019-??-?? Andrea Corallo * jit.dg/all-non-failing-tests.h: Add test-long-string-literal.c. * jit.dg/test-long-string-literal.c: New testcase.