ASAN_OPTIONS=leak_check_at_exit=0:verbose=1 ./run-octave GNU Octave, version 4.3.0+ Copyright (C) 2016 John W. Eaton and others. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type 'warranty'. Octave was configured for "x86_64-pc-linux-gnu". Additional information about Octave is available at http://www.octave.org. Please contribute if you find this software useful. For more information, visit http://www.octave.org/get-involved.html Read http://www.octave.org/bugs.html to learn how to submit bug reports. For information about changes from previous versions, type 'news'. octave:1> test libinterp/corefcn/Cell.cc-tst verbose >>>>> /home/dima/src/octave/gcc_asan/libinterp/corefcn/Cell.cc-tst ***** test a = {"foo", "bar"}; assert (a(), a); ***** error nnz ({0, 1, 2}) ================================================================= ==31800==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7ffdd9ad7d70 at pc 0x7f50bf48de67 bp 0x7ffdd9ad7a70 sp 0x7ffdd9ad7a60 WRITE of size 8 at 0x7ffdd9ad7d70 thread T0 #0 0x7f50bf48de66 in Array::Array() ../liboctave/array/Array.h:257 #1 0x7f50bf48de66 in octave_value_list::octave_value_list() ../libinterp/octave-value/ovl.h:46 #2 0x7f50c07ede59 in octave::tree_evaluator::visit_identifier(octave::tree_identifier&) ../libinterp/parse-tree/pt-eval.cc:1035 #3 0x7f50c07a9ccd in octave::tree_evaluator::evaluate(octave::tree_expression*, int) ../libinterp/parse-tree/pt-eval.h:270 #4 0x7f50c07a9ccd in octave::tree_argument_list::convert_to_const_vector(octave::tree_evaluator*, octave_value const*) ../libinterp/parse-tree/pt-arg-list.cc:248 #5 0x7f50c07fa686 in octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&) ../libinterp/parse-tree/pt-eval.cc:1287 #6 0x7f50c0310cce in octave::tree_evaluator::evaluate(octave::tree_expression*, int) ../libinterp/parse-tree/pt-eval.h:270 #7 0x7f50c07fe67c in octave::tree_evaluator::visit_simple_assignment(octave::tree_simple_assignment&) ../libinterp/parse-tree/pt-eval.cc:2095 #8 0x7f50c0310cce in octave::tree_evaluator::evaluate(octave::tree_expression*, int) ../libinterp/parse-tree/pt-eval.h:270 #9 0x7f50c07e3bb5 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2219 #10 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #11 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #12 0x7f50c054b4df in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #13 0x7f50c054b4df in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:644 #14 0x7f50c07fa97b in octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&) ../libinterp/parse-tree/pt-eval.cc:1302 #15 0x7f50c0310cce in octave::tree_evaluator::evaluate(octave::tree_expression*, int) ../libinterp/parse-tree/pt-eval.h:270 #16 0x7f50c07fe67c in octave::tree_evaluator::visit_simple_assignment(octave::tree_simple_assignment&) ../libinterp/parse-tree/pt-eval.cc:2095 #17 0x7f50c0310cce in octave::tree_evaluator::evaluate(octave::tree_expression*, int) ../libinterp/parse-tree/pt-eval.h:270 #18 0x7f50c07e3bb5 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2219 #19 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #20 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #21 0x7f50c07e516a in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #22 0x7f50c07e516a in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:1123 #23 0x7f50c07e3a64 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2186 #24 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #25 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #26 0x7f50c07d7606 in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #27 0x7f50c07d7606 in octave::tree_evaluator::visit_try_catch_command(octave::tree_try_catch_command&) ../libinterp/parse-tree/pt-eval.cc:2418 #28 0x7f50c07e3a64 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2186 #29 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #30 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #31 0x7f50c07e516a in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #32 0x7f50c07e516a in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:1123 #33 0x7f50c07e3a64 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2186 #34 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #35 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #36 0x7f50c07e516a in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #37 0x7f50c07e516a in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:1123 #38 0x7f50c07e3a64 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2186 #39 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #40 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #41 0x7f50c07d9106 in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #42 0x7f50c07d9106 in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) ../libinterp/parse-tree/pt-eval.cc:2520 #43 0x7f50c07e3a64 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2186 #44 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #45 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #46 0x7f50c07e0ffe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #47 0x7f50c07e0ffe in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) ../libinterp/parse-tree/pt-eval.cc:818 #48 0x7f50c07e3a64 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2186 #49 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #50 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #51 0x7f50c054b4df in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #52 0x7f50c054b4df in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:644 #53 0x7f50c07fa97b in octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&) ../libinterp/parse-tree/pt-eval.cc:1302 #54 0x7f50c0310cce in octave::tree_evaluator::evaluate(octave::tree_expression*, int) ../libinterp/parse-tree/pt-eval.h:270 #55 0x7f50c07e3bb5 in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:2219 #56 0x7f50c07c9d46 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:112 #57 0x7f50c07c9d46 in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:2261 #58 0x7f50c12a3c7b in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:187 #59 0x7f50c12a3c7b in octave::interpreter::main_loop() ../libinterp/corefcn/interpreter.cc:976 #60 0x7f50c12af2ef in octave::interpreter::execute() ../libinterp/corefcn/interpreter.cc:697 #61 0x7f50bf3f9686 in octave::cli_application::execute() ../libinterp/octave.cc:382 #62 0x401ca4 in main ../src/main-cli.cc:90 #63 0x7f50b3a8a4d9 in __libc_start_main (/lib64/libc.so.6+0x204d9) #64 0x402329 in _start (/home/dima/src/octave/gcc_asan/src/.libs/lt-octave-cli+0x402329) Address 0x7ffdd9ad7d70 is located in stack of thread T0 at offset 640 in frame #0 0x7f50c07edbff in octave::tree_evaluator::visit_identifier(octave::tree_identifier&) ../libinterp/parse-tree/pt-eval.cc:1030 This frame has 14 object(s): [32, 33) '' [96, 112) 'val' [160, 184) 'sym' [224, 256) '' [288, 320) '' [352, 384) '__tmp' [416, 456) '' [512, 592) 'retval' [640, 720) '' <== Memory access at offset 640 is inside this variable [768, 848) '' [896, 976) '' [1024, 1104) 'args' [1152, 1232) '' [1280, 1360) '' HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext (longjmp and C++ exceptions *are* supported) SUMMARY: AddressSanitizer: stack-use-after-scope ../liboctave/array/Array.h:257 in Array::Array() Shadow bytes around the buggy address: 0x10003b352f50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 0x10003b352f60: f1 f1 01 f2 f2 f2 f2 f2 f2 f2 00 00 f2 f2 f2 f2 0x10003b352f70: f2 f2 00 00 00 f2 f2 f2 f2 f2 00 00 00 00 f2 f2 0x10003b352f80: f2 f2 00 00 00 00 f2 f2 f2 f2 00 00 00 00 f2 f2 0x10003b352f90: f2 f2 00 00 00 00 00 f2 f2 f2 f2 f2 f2 f2 00 00 =>0x10003b352fa0: 00 00 00 00 00 00 00 00 f2 f2 f2 f2 f2 f2[f8]f8 0x10003b352fb0: f8 f8 00 00 00 00 00 00 f2 f2 f2 f2 f2 f2 00 00 0x10003b352fc0: 00 00 00 00 00 00 00 00 f2 f2 f2 f2 f2 f2 00 00 0x10003b352fd0: 00 00 00 00 00 00 00 00 f2 f2 f2 f2 f2 f2 00 00 0x10003b352fe0: 00 00 00 00 00 00 00 00 f2 f2 f2 f2 f2 f2 00 00 0x10003b352ff0: 00 00 00 00 00 00 00 00 f2 f2 f2 f2 f2 f2 00 00 Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb ==31800==ABORTING