Adding an integer to an array crashes valac
@pwithnall
Submitted by Philip Withnall Link to original bug (#653836)
Description
With (master, 69be9977), the following test program:
// valac -C test-array.vala
void my_func (uint8[] input) {
}
void main () { uint8[] data = { 1, 2, 3 }; my_func (data + 2); }
causes the following crash (assertion failure) in valac:
(gdb) run -C test-array.vala
Starting program: /opt/gnome3/build/bin/valac -C test-array.vala
[Thread debugging using libthread_db enabled]
**
ERROR:valaccodearraymodule.c:935:vala_ccode_array_module_real_get_array_length_cvalue: assertion failed: (_tmp19_)
Program received signal SIGABRT, Aborted.
0x0000003ffe4352d5 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
(gdb) bt
#0 0x0000003ffe4352d5 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x0000003ffe436beb in abort () at abort.c:93
#2 0x00007ffff720d282 in g_assertion_message (domain=0x0, file=0x7ffff7d507a0 "valaccodearraymodule.c", line=935,
func=0x7ffff7d50e40 "vala_ccode_array_module_real_get_array_length_cvalue", message=0x11209e0 "assertion failed: (_tmp19_)") at gtestutils.c:1425
#3 0x00007ffff720d2e3 in g_assertion_message_expr (domain=0x0, file=0x7ffff7d507a0 "valaccodearraymodule.c", line=935,
func=0x7ffff7d50e40 "vala_ccode_array_module_real_get_array_length_cvalue", expr=0x7ffff7d50798 "_tmp19_") at gtestutils.c:1436
#4 0x00007ffff79a66e9 in vala_ccode_array_module_real_get_array_length_cvalue (base=0x630180, value=0x10ffdc0, dim=1) at valaccodearraymodule.c:935
#5 0x00007ffff7a0a05f in vala_ccode_base_module_get_array_length_cvalue (self=0x630180, value=0x10ffdc0, dim=1) at valaccodebasemodule.c:23617
#6 0x00007ffff7a009db in vala_ccode_base_module_transform_value (self=0x630180, value=0x10ffdc0, target_type=0xf62580, node=0x1024010)
at valaccodebasemodule.c:21117
#7 0x00007ffff79e5ede in vala_ccode_base_module_real_visit_expression (base=0x630180, expr=0x1024010) at valaccodebasemodule.c:13954
#8 0x00007ffff7b93c92 in vala_code_visitor_visit_expression (self=0x630180, expr=0x1024010) at valacodevisitor.c:2097
#9 0x00007ffff7b787ea in vala_binary_expression_real_emit (base=0x1024010, codegen=0x630180) at valabinaryexpression.c:3479
#10 0x00007ffff7b90fe7 in vala_code_node_emit (self=0x1024010, codegen=0x630180) at valacodenode.c:422
#11 0x00007ffff7c8b07b in vala_method_call_real_emit (base=0x101f030, codegen=0x630180) at valamethodcall.c:4322
#12 0x00007ffff7b90fe7 in vala_code_node_emit (self=0x101f030, codegen=0x630180) at valacodenode.c:422
#13 0x00007ffff7bc87bb in vala_expression_statement_real_emit (base=0xfe2c00, codegen=0x630180) at valaexpressionstatement.c:374
#14 0x00007ffff7b90fe7 in vala_code_node_emit (self=0xfe2c00, codegen=0x630180) at valacodenode.c:422
#15 0x00007ffff79cebc2 in vala_ccode_base_module_real_visit_block (base=0x630180, b=0xfec870) at valaccodebasemodule.c:7576
#16 0x00007ffff7b92fe0 in vala_code_visitor_visit_block (self=0x630180, b=0xfec870) at valacodevisitor.c:1697
#17 0x00007ffff7b7a504 in vala_block_real_emit (base=0xfec870, codegen=0x630180) at valablock.c:1950
#18 0x00007ffff7b90fe7 in vala_code_node_emit (self=0xfec870, codegen=0x630180) at valacodenode.c:422
#19 0x00007ffff7a44b06 in vala_ccode_method_module_real_visit_method (base=0x630180, m=0x1007af0) at valaccodemethodmodule.c:2893
#20 0x00007ffff7ac941a in vala_gasync_module_real_visit_method (base=0x630180, m=0x1007af0) at valagasyncmodule.c:1972
#21 0x00007ffff7b92a4d in vala_code_visitor_visit_method (self=0x630180, m=0x1007af0) at valacodevisitor.c:1521
#22 0x00007ffff7c75278 in vala_method_real_accept (base=0x1007af0, visitor=0x630180) at valamethod.c:1913
#23 0x00007ffff7b90e4d in vala_code_node_accept (self=0x1007af0, visitor=0x630180) at valacodenode.c:381
#24 0x00007ffff7d0889a in vala_source_file_accept_children (self=0x626160, visitor=0x630180) at valasourcefile.c:429
#25 0x00007ffff79b9d7b in vala_ccode_base_module_real_visit_source_file (base=0x630180, source_file=0x626160) at valaccodebasemodule.c:1850
#26 0x00007ffff7b92459 in vala_code_visitor_visit_source_file (self=0x630180, source_file=0x626160) at valacodevisitor.c:1329
#27 0x00007ffff7d087be in vala_source_file_accept (self=0x626160, visitor=0x630180) at valasourcefile.c:402
#28 0x00007ffff79b8226 in vala_ccode_base_module_real_emit (base=0x630180, context=0x61b000) at valaccodebasemodule.c:1312
#29 0x00007ffff7b903ac in vala_code_generator_emit (self=0x630180, context=0x61b000) at valacodegenerator.c:1234
#30 0x0000000000405d02 in vala_compiler_run (self=0x619e00) at valacompiler.c:991
#31 0x0000000000407d5a in vala_compiler_main (args=0x7fffffffd868, args_length1=1) at valacompiler.c:1605
#32 0x0000000000407db0 in main (argc=3, argv=0x7fffffffd868) at valacompiler.c:1614
(gdb) frame 4
#4 0x00007ffff79a66e9 in vala_ccode_array_module_real_get_array_length_cvalue (base=0x630180, value=0x10ffdc0, dim=1) at valaccodearraymodule.c:935
935 g_assert (_tmp19_);
(gdb) print _tmp20_
No symbol "_tmp20_" in current context.
(gdb) Gah, stupid gcc
Undefined command: "Gah". Try "help".
(gdb) print size
$1 = (ValaList *) 0x0
(gdb) print value
$2 = (ValaTargetValue *) 0x10ffdc0
(gdb) print (ValaGLibValue*) $2
$3 = (ValaGLibValue *) 0x10ffdc0
(gdb) print *$3->priv
$4 = <incomplete type>
(gdb) print *$3
$5 = {parent_instance = {parent_instance = {g_class = 0xe65e20}, ref_count = 1, priv = 0x10ffe30}, priv = 0x0, cvalue = 0x111fcc0, non_null = 0,
ctype = 0x0, array_length_cvalues = 0x0, array_size_cvalue = 0x0, array_null_terminated = 0, array_length_cexpr = 0x0, delegate_target_cvalue = 0x0,
delegate_target_destroy_notify_cvalue = 0x0}
(gdb)
I realise the test program uses invalid syntax, but valac should give a helpful error message instead of exploding. :-)