Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Cpp] SIGABRT when using TokenStreamRewrite::Delete method #1698

Closed
2 tasks done
Thomasb81 opened this issue Feb 25, 2017 · 1 comment
Closed
2 tasks done

[Cpp] SIGABRT when using TokenStreamRewrite::Delete method #1698

Thomasb81 opened this issue Feb 25, 2017 · 1 comment
Milestone

Comments

@Thomasb81
Copy link
Contributor

Before submitting an issue to ANTLR, please check off these boxes:

Using TokenStreamRewriter::Delete method lead to program crash. Here is the stack trace :

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid

Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:58
58	../sysdeps/unix/sysv/linux/raise.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:58
#1  0x00007ffff74a93ea in __GI_abort () at abort.c:89
#2  0x00007ffff7ae158d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff7adf336 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff7adf381 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff7adf599 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffff7b08d4f in std::__throw_logic_error(char const*) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7  0x00007ffff7b763d4 in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*>(char const*, char const*, std::forward_iterator_tag) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#8  0x00007ffff7b7658c in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#9  0x0000555555745e51 in antlr4::TokenStreamRewriter::Delete (this=0x555555aeb8f0, programName="default", from=21, to=53)
    at /home/tom/prog/git/test_antlr/runtime/src/TokenStreamRewriter.cpp:206
#10 0x0000555555745d81 in antlr4::TokenStreamRewriter::Delete (this=0x555555aeb8f0, from=21, to=53)
    at /home/tom/prog/git/test_antlr/runtime/src/TokenStreamRewriter.cpp:194
#11 0x000055555570c914 in vPreprocessor::exitIfdef_directive (this=0x555555b06c60, ctx=0x555555ad1940)
    at /home/tom/prog/git/test_antlr/demo4/src/vPreprocessor.cpp:19
#12 0x0000555555716212 in vppParser::Ifdef_directiveContext::exitRule (this=0x555555ad1940, listener=0x555555b06c60)
    at /home/tom/prog/git/test_antlr/demo4/generated/vppParser.cpp:608
#13 0x00005555557d44b5 in antlr4::tree::ParseTreeWalker::exitRule (this=0x7fffffffddb0, listener=0x555555b06c60, r=0x555555ad1940)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:43
#14 0x00005555557d43b3 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555ad1940)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:32
#15 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555ad03f0)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#16 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555bef8e0)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#17 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555ad2e20)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#18 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555ad8f90)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#19 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555af44b0)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#20 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555ad8fe0)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#21 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555afc4d0)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#22 0x00005555557d4386 in antlr4::tree::ParseTreeWalker::walk (this=0x7fffffffddb0, listener=0x555555b06c60, t=0x555555ac2c20)
    at /home/tom/prog/git/test_antlr/runtime/src/tree/ParseTreeWalker.cpp:30
#23 0x000055555570b8a4 in main () at /home/tom/prog/git/test_antlr/demo4/src/main.cpp:52
(gdb) frame 9
#9  0x0000555555745e51 in antlr4::TokenStreamRewriter::Delete (this=0x555555aeb8f0, programName="default", from=21, to=53)
    at /home/tom/prog/git/test_antlr/runtime/src/TokenStreamRewriter.cpp:206
206	  replace(programName, from, to, nullptr);

Incriminate code is the following:

void TokenStreamRewriter::Delete(const std::string &programName, size_t from, size_t to) {
  replace(programName, from, to, nullptr);
}

while TokenStreamRewriter::replace has the following prototype:
void TokenStreamRewriter::replace(const std::string &programName, size_t from, size_t to, const std::string& text);

The correct code must be

void TokenStreamRewriter::Delete(const std::string &programName, size_t from, size_t to) {
  std::string nullString
  replace(programName, from, to, nullString);
}

in order to provide a reference on a valid object to TokenStreamRewriter::replace

parrt added a commit that referenced this issue Mar 1, 2017
@parrt parrt added this to the 4.7 milestone Mar 1, 2017
@parrt
Copy link
Member

parrt commented Mar 1, 2017

please use "Fixes #1698" in commit messages to get autoclose.

@parrt parrt closed this as completed Mar 1, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants