Crash on malformed index expression
geoffromer opened this issue · comments
Geoff Romer commented
Description of the bug:
The toolchain crashes if an unexpected token is encountered while parsing an index expression.
What did you do, or what's a simple way to reproduce the bug?
The following test program exhibits the problem:
var=0[,]
What did you expect to happen?
A diagnostic reporting a parse error with the input program.
What actually happened?
The toolchain crashes with "CHECK failure at toolchain/parser/parser_context.cpp:125: PositionIs(kind): Required CloseSquareBracket, found Comma" and a stack trace.
Any other information, logs, or outputs that you want to share?
Here's the full output:
Please report issues to https://github.com/carbon-language/carbon-lang/issues and include the crash backtrace.
Stack dump:
0. Program arguments: /usr/local/google/home/gromer/.cache/bazel/_bazel_gromer/6b556be8ddbdbba287a2e1ef86f733d5/execroot/carbon/bazel-out/k8-fastbuild/bin/toolchain/driver/carbon dump parse-tree test.carbon
1. Parser stack:
0. DeclarationScopeLoop @ 1:1: token 0 : Var
1. VarFinishAsSemicolon @ 1:1: token 0 : Var
2. ExpressionLoop @ 1:5: token 2 : IntegerLiteral
3. ExpressionInPostfixLoop @ 1:6: token 3 : OpenSquareBracket
cursor position_ @ 1:7: token 4 : Comma
#0 0x0000556ae71a1d0b backtrace (/usr/local/google/home/gromer/.cache/bazel/_bazel_gromer/6b556be8ddbdbba287a2e1ef86f733d5/execroot/carbon/bazel-out/k8-fastbuild/bin/toolchain/driver/carbon+0x6cb6d0b)
#1 0x0000556aec660def llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /proc/self/cwd/external/llvm-project/llvm/lib/Support/Unix/Signals.inc:606:8
#2 0x0000556aec661abb PrintStackTraceSignalHandler(void*) /proc/self/cwd/external/llvm-project/llvm/lib/Support/Unix/Signals.inc:675:1
#3 0x0000556aec65c187 llvm::sys::RunSignalHandlers() /proc/self/cwd/external/llvm-project/llvm/lib/Support/Signals.cpp:105:18
#4 0x0000556aec662716 SignalHandler(int) /proc/self/cwd/external/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#5 0x00007fcf22c52f90 (/lib/x86_64-linux-gnu/libc.so.6+0x3bf90)
#6 0x00007fcf22ca1ccc __pthread_kill_implementation ./nptl/./nptl/pthread_kill.c:44:76
#7 0x00007fcf22c52ef2 raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007fcf22c3d472 abort ./stdlib/./stdlib/abort.c:81:7
#9 0x0000556aebe52533 Carbon::Internal::ExitingStream::Done() /proc/self/cwd/common/check_internal.cpp:34:3
#10 0x0000556ae72389ee Carbon::Internal::operator|(Carbon::Internal::ExitingStream::Helper, Carbon::Internal::ExitingStream&) /proc/self/cwd/./common/check_internal.h:58:12
#11 0x0000556aebe11bf9 Carbon::ParserContext::ConsumeChecked(Carbon::TokenKind) /proc/self/cwd/toolchain/parser/parser_context.cpp:125:3
#12 0x0000556aebe212b1 Carbon::ParserHandleIndexExpressionFinish(Carbon::ParserContext&) /proc/self/cwd/toolchain/parser/parser_handle_index_expression.cpp:24:46
#13 0x0000556aebe04178 Carbon::ParseTree::Parse(Carbon::TokenizedBuffer&, Carbon::DiagnosticConsumer&, llvm::raw_ostream*) /proc/self/cwd/./toolchain/parser/parser_state.def:53:1
#14 0x0000556ae7229caa Carbon::Driver::RunDumpSubcommand(Carbon::DiagnosticConsumer&, llvm::ArrayRef<llvm::StringRef>) /proc/self/cwd/toolchain/driver/driver.cpp:0:21
#15 0x0000556ae7228171 Carbon::Driver::RunFullCommand(llvm::ArrayRef<llvm::StringRef>) /proc/self/cwd/./toolchain/driver/flags.def:0:1
#16 0x0000556ae72267f5 main /proc/self/cwd/toolchain/driver/driver_main.cpp:35:1
#17 0x00007fcf22c3e18a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#18 0x00007fcf22c3e245 call_init ./csu/../csu/libc-start.c:128:20
#19 0x00007fcf22c3e245 __libc_start_main ./csu/../csu/libc-start.c:368:5
#20 0x0000556ae71661e1 _start (/usr/local/google/home/gromer/.cache/bazel/_bazel_gromer/6b556be8ddbdbba287a2e1ef86f733d5/execroot/carbon/bazel-out/k8-fastbuild/bin/toolchain/driver/carbon+0x6c7b1e1)
CHECK failure at toolchain/parser/parser_context.cpp:125: PositionIs(kind): Required CloseSquareBracket, found Comma
Aborted