[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: GNU poke 3.90.1 goes into an endless recursion
|
From: |
Bruno Haible |
|
Subject: |
Re: GNU poke 3.90.1 goes into an endless recursion |
|
Date: |
Mon, 22 Jan 2024 22:53:30 +0100 |
Building GNU poke 3.90.1 on Ubuntu 22.04 with clang 17
<https://github.com/llvm/llvm-project/releases> works fine;
it passes all tests. I set these environment variables before
configuring poke:
CC="$HOME/inst-clang/17.0.4/bin/clang -Wl,-rpath,$HOME/inst-clang/17.0.4/lib"
CXX="$HOME/inst-clang/17.0.4/bin/clang++ -I/usr/include/c++/11
-I/usr/include/x86_64-linux-gnu/c++/11 -L/usr/lib/gcc/x86_64-linux-gnu/11
-Wl,-rpath,$HOME/inst-clang/17.0.4/lib"
export CC CXX
When I additionally enable the address and undefined-behaviour sanitizers:
CC="$CC
-fsanitize=address,undefined,signed-integer-overflow,shift,integer-divide-by-zero";
CXX="$CXX
-fsanitize=address,undefined,signed-integer-overflow,shift,integer-divide-by-zero";
export CC CXX
CFLAGS="-O0 -fno-omit-frame-pointer -ggdb"; CXXFLAGS="-O0
-fno-omit-frame-pointer -ggdb"; export CFLAGS CXXFLAGS
ASAN_OPTIONS="detect_leaks=0 abort_on_error=1 allocator_may_return_null=1"
export ASAN_OPTIONS
the build works fine as well. However, one of the unit tests crashes:
================================================================================
Making a new site.exp file ...
Using ../../testsuite/lib/poke.exp as tool init file.
Test run by bruno on Mon Jan 22 21:54:31 2024
Native configuration is x86_64-pc-linux-gnu
=== poke tests ===
Schedule of variations:
unix
Running target unix
Using /usr/share/dejagnu/baseboards/unix.exp as board description file for
target.
Using /usr/share/dejagnu/config/unix.exp as generic interface file for target.
Using /media/develdata/devel/build/poke-3.90.1.3/testsuite/config/unix.exp as
tool-and-target-specific interface file.
Running /media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.cmd/cmd.exp
...
Running
/media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.libpoke/libpoke.exp
...
Running /media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.map/map.exp
...
Running
/media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.pickles/pickles.exp
...
FAIL:
/media/develdata/devel/build/poke-3.90.1.3/build-64-clang/testsuite/../poke/poke
killed: 3602368 exp6 0 0 CHILDKILLED SIGSEGV {segmentation violation}
Running /media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.pkl/pkl.exp
...
Running
/media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.pktest/pktest.exp ...
Running
/media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.pokefmt/pokefmt.exp
...
Running /media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.pvm/pvm.exp
...
Running /media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.repl/repl.exp
...
Running /media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.std/std.exp
...
Running /media/develdata/devel/build/poke-3.90.1.3/testsuite/poke.time/time.exp
...
=== poke Summary ===
# of expected passes 7988
# of unexpected failures 1
# of expected failures 3
# of unsupported tests 3
make[4]: *** [Makefile:5896: check-DEJAGNU] Error 1
================================================================================
Looking in poke.sum:
PASS: poke.pickles/gcov-test.pk: 1 GCOV_Length
PASS:
/media/develdata/devel/build/poke-3.90.1.3/build-64-clang/testsuite/../poke/poke
exited cleanly
FAIL:
/media/develdata/devel/build/poke-3.90.1.3/build-64-clang/testsuite/../poke/poke
killed: 3602368 exp6 0 0 CHILDKILLED SIGSEGV {segmentation violation}
PASS: poke.pickles/guid-test.pk: 1 invariant on both endiannesses
Between gcov-test.pk and guid-test.pk there is only one test: gpt-test.pk
So, I tried it interactively (before or after "make install", doesn't matter):
$ poke
(poke) load gpt;
Segmentation fault (core dumped)
$ gdb poke
...
(gdb) run
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff65c75de in GC_find_limit_with_bound (p=0x55555615a150 "",
up=up@entry=0, bound=bound@entry=0x0) at extra/../os_dep.c:1011
1011 GC_noop1((word)(*result));
(gdb) continue
Continuing.
[New Thread 0x7fffef843640 (LWP 3666074)]
[New Thread 0x7fffef042640 (LWP 3666075)]
[New Thread 0x7fffedd38640 (LWP 3666076)]
[New Thread 0x7fffeca2e640 (LWP 3666077)]
[New Thread 0x7fffec22d640 (LWP 3666078)]
[New Thread 0x7fffeaf23640 (LWP 3666079)]
[New Thread 0x7fffe9c19640 (LWP 3666080)]
[New Thread 0x7fffe7e06640 (LWP 3666081)]
[New Thread 0x7fffe6afc640 (LWP 3666082)]
[New Thread 0x7fffe62fb640 (LWP 3666083)]
[New Thread 0x7fffe5afa640 (LWP 3666084)]
[New Thread 0x7fffe0bc5640 (LWP 3666086)]
_____
---' __\_______
______) GNU poke 3.90.1
__)
__)
---._______)
Copyright (C) 2023 The poke authors.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Powered by Jitter 0.9.298.
Perpetrated by Jose E. Marchesi.
hserver listening in port 38947.
For help, type: ".help".
Type ".exit" to leave the program.
(poke) load gpt;
Thread 1 "poke" received signal SIGSEGV, Segmentation fault.
0x00007ffff7159a54 in pkl_call_node_handlers (compiler=0x507000021420,
toplevel=0x7fffff808ee0, ast=0x504000088390, node=0x50e0009701c0,
payloads=0x7ffff266bf00, phases=0x7ffff266bee0,
handlers_used=0x7ffff2014ba0, child_pos=0, parent=0x0, _dobreak=0x7ffff2014bb0,
order=0,
flags=0, level=0) at ../../libpoke/pkl-pass.c:150
150 {
(gdb) where
#0 0x00007ffff7159a54 in pkl_call_node_handlers (compiler=0x507000021420,
toplevel=0x7fffff808ee0, ast=0x504000088390, node=0x50e0009701c0,
payloads=0x7ffff266bf00, phases=0x7ffff266bee0,
handlers_used=0x7ffff2014ba0, child_pos=0, parent=0x0, _dobreak=0x7ffff2014bb0,
order=0,
flags=0, level=0) at ../../libpoke/pkl-pass.c:150
#1 0x00007ffff7141bb1 in pkl_do_pass_1 (compiler=0x507000021420,
toplevel=0x7fffff808ee0, ast=0x504000088390, node=0x50e0009701c0, child_pos=0,
parent=0x0, payloads=0x7ffff266bf00, phases=0x7ffff266bee0, flags=0,
level=0) at ../../libpoke/pkl-pass.c:316
#2 0x00007ffff71415d2 in pkl_do_subpass (compiler=0x507000021420,
ast=0x504000088390, node=0x50e0009701c0, phases=0x7ffff266bee0,
payloads=0x7ffff266bf00, flags=0, level=0) at ../../libpoke/pkl-pass.c:662
#3 0x00007ffff7470c80 in pkl_gen_pr_cond_exp (_compiler=0x507000021420,
_toplevel=0x7fffff814d60, _ast=0x504000088390, _node=0x50e000974c20,
_payload=0x7ffff266a020, _restart=0x7ffff2453320, _child_pos=0,
_parent=0x0, _dobreak=0x7ffff2453020, _payloads=0x7ffff266bf00,
_phases=0x7ffff266bee0, _flags=0, _level=0) at ../../libpoke/pkl-gen.c:4940
#4 0x00007ffff717e92f in pkl_call_node_handlers (compiler=0x507000021420,
toplevel=0x7fffff814d60, ast=0x504000088390, node=0x50e000974c20,
payloads=0x7ffff266bf00, phases=0x7ffff266bee0,
handlers_used=0x7ffff2014b20, child_pos=0, parent=0x0, _dobreak=0x7ffff2014b30,
order=0,
flags=0, level=0) at ../../libpoke/pkl-pass.c:205
#5 0x00007ffff7141bb1 in pkl_do_pass_1 (compiler=0x507000021420,
toplevel=0x7fffff814d60, ast=0x504000088390, node=0x50e000974c20, child_pos=0,
parent=0x0, payloads=0x7ffff266bf00, phases=0x7ffff266bee0, flags=0,
level=0) at ../../libpoke/pkl-pass.c:316
#6 0x00007ffff71415d2 in pkl_do_subpass (compiler=0x507000021420,
ast=0x504000088390, node=0x50e000974c20, phases=0x7ffff266bee0,
payloads=0x7ffff266bf00, flags=0, level=0) at ../../libpoke/pkl-pass.c:662
#7 0x00007ffff74713ff in pkl_gen_pr_cond_exp (_compiler=0x507000021420,
_toplevel=0x7fffff820be0, _ast=0x504000088390, _node=0x50e000974d00,
_payload=0x7ffff266a020, _restart=0x7ffff244cb20, _child_pos=0,
_parent=0x0, _dobreak=0x7ffff244c820, _payloads=0x7ffff266bf00,
_phases=0x7ffff266bee0, _flags=0, _level=0) at ../../libpoke/pkl-gen.c:4945
#8 0x00007ffff717e92f in pkl_call_node_handlers (compiler=0x507000021420,
toplevel=0x7fffff820be0, ast=0x504000088390, node=0x50e000974d00,
payloads=0x7ffff266bf00, phases=0x7ffff266bee0,
handlers_used=0x7ffff2006520, child_pos=0, parent=0x0, _dobreak=0x7ffff2006530,
order=0,
flags=0, level=0) at ../../libpoke/pkl-pass.c:205
#9 0x00007ffff7141bb1 in pkl_do_pass_1 (compiler=0x507000021420,
toplevel=0x7fffff820be0, ast=0x504000088390, node=0x50e000974d00, child_pos=0,
parent=0x0, payloads=0x7ffff266bf00, phases=0x7ffff266bee0, flags=0,
level=0) at ../../libpoke/pkl-pass.c:316
#10 0x00007ffff71415d2 in pkl_do_subpass (compiler=0x507000021420,
ast=0x504000088390, node=0x50e000974d00, phases=0x7ffff266bee0,
payloads=0x7ffff266bf00, flags=0, level=0) at ../../libpoke/pkl-pass.c:662
#11 0x00007ffff74713ff in pkl_gen_pr_cond_exp (_compiler=0x507000021420,
_toplevel=0x7fffff82ca60, _ast=0x504000088390, _node=0x50e000974de0,
_payload=0x7ffff266a020, _restart=0x7ffff2446320, _child_pos=0,
_parent=0x0, _dobreak=0x7ffff2446020, _payloads=0x7ffff266bf00,
_phases=0x7ffff266bee0, _flags=0, _level=0) at ../../libpoke/pkl-gen.c:4945
#12 0x00007ffff717e92f in pkl_call_node_handlers (compiler=0x507000021420,
toplevel=0x7fffff82ca60, ast=0x504000088390, node=0x50e000974de0,
payloads=0x7ffff266bf00, phases=0x7ffff266bee0,
handlers_used=0x7ffff20f7ea0, child_pos=0, parent=0x0, _dobreak=0x7ffff20f7eb0,
order=0,
flags=0, level=0) at ../../libpoke/pkl-pass.c:205
#13 0x00007ffff7141bb1 in pkl_do_pass_1 (compiler=0x507000021420,
toplevel=0x7fffff82ca60, ast=0x504000088390, node=0x50e000974de0, child_pos=0,
parent=0x0, payloads=0x7ffff266bf00, phases=0x7ffff266bee0, flags=0,
level=0) at ../../libpoke/pkl-pass.c:316
#14 0x00007ffff71415d2 in pkl_do_subpass (compiler=0x507000021420,
ast=0x504000088390, node=0x50e000974de0, phases=0x7ffff266bee0,
payloads=0x7ffff266bf00, flags=0, level=0) at ../../libpoke/pkl-pass.c:662
#15 0x00007ffff74713ff in pkl_gen_pr_cond_exp (_compiler=0x507000021420,
_toplevel=0x7fffff8388e0, _ast=0x504000088390, _node=0x50e000974ec0,
_payload=0x7ffff266a020, _restart=0x7ffff2440320, _child_pos=0,
_parent=0x0, _dobreak=0x7ffff2440020, _payloads=0x7ffff266bf00,
_phases=0x7ffff266bee0, _flags=0, _level=0) at ../../libpoke/pkl-gen.c:4945
#16 0x00007ffff717e92f in pkl_call_node_handlers (compiler=0x507000021420,
toplevel=0x7fffff8388e0, ast=0x504000088390, node=0x50e000974ec0,
payloads=0x7ffff266bf00, phases=0x7ffff266bee0,
handlers_used=0x7ffff20e98a0, child_pos=0, parent=0x0, _dobreak=0x7ffff20e98b0,
order=0,
flags=0, level=0) at ../../libpoke/pkl-pass.c:205
#17 0x00007ffff7141bb1 in pkl_do_pass_1 (compiler=0x507000021420,
toplevel=0x7fffff8388e0, ast=0x504000088390, node=0x50e000974ec0, child_pos=0,
parent=0x0, payloads=0x7ffff266bf00, phases=0x7ffff266bee0, flags=0,
level=0) at ../../libpoke/pkl-pass.c:316
#18 0x00007ffff71415d2 in pkl_do_subpass (compiler=0x507000021420,
ast=0x504000088390, node=0x50e000974ec0, phases=0x7ffff266bee0,
payloads=0x7ffff266bf00, flags=0, level=0) at ../../libpoke/pkl-pass.c:662
...
There is clearly an endless recursion
pkl-gen.c:4945 -> pkl-pass.c:662 -> pkl-pass.c:316 -> pkl-pass.c:205 ->
pkl-gen.c:4945
The poke developers certainly know whether this is best debugged at the C
source level, or by shrinking gpt.pk to a minimal example...
It could also be a problem with the clang sanitizers' implementation.
| [Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: GNU poke 3.90.1 goes into an endless recursion,
Bruno Haible <=