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

vscode clangd crash in envoy dev environment #109297

Closed
ravenblackx opened this issue Sep 19, 2024 · 4 comments
Closed

vscode clangd crash in envoy dev environment #109297

ravenblackx opened this issue Sep 19, 2024 · 4 comments
Labels
clangd crash Prefer [crash-on-valid] or [crash-on-invalid]

Comments

@ravenblackx
Copy link

ravenblackx commented Sep 19, 2024

Crashing while work in progress on some envoy code.

I made a branch to capture the complete code state at the time of the crash - this consistently occurs within a few seconds of starting up the window with the code in this state and only the cache_filter.cc tab open.

The compilation database has been freshly generated (I don't know if that's relevant) via envoy's script for that purpose.

I definitely don't expect it to compile in this half-modified state, but I also would prefer not to expect the clangd server to crash and drop core dumps into my workspace. :)

Edit: I disabled several other extensions to make sure it wasn't interference, the remaining non-disabled extensions that could feasibly be related are C/C++ Themes (Microsoft), Bazel, Github Pull Requests and clangd v0.1.29.

Stack trace and surrounding log ``` I[14:44:53.854] <-- reply(1) I[14:44:53.854] --> reply:textDocument/documentSymbol(9) 3439 ms I[14:44:53.855] --> reply:textDocument/hover(10) 1997 ms, error: Task was cancelled. I[14:44:53.855] --> reply:textDocument/hover(11) 465 ms, error: Task was cancelled. I[14:44:53.855] --> textDocument/clangd.fileStatus [Error - 2:44:53 PM] Request textDocument/hover failed. [object Object] [Error - 2:44:53 PM] Request textDocument/hover failed. [object Object] #0 0x000000000053b893 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/llvm/bin/clangd+0x53b893) #1 0x000000000053991c llvm::sys::RunSignalHandlers() (/opt/llvm/bin/clangd+0x53991c) #2 0x000000000053bbff SignalHandler(int) Signals.cpp:0:0 #3 0x00007905fa3f0420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420) #4 0x00000000006d0a4f clang::StmtVisitorBase::Visit(clang::Stmt const*) ExprConstant.cpp:0:0 #5 0x0000000000687e44 EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0 #6 0x0000000000687ab4 clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&, clang::ASTContext const&, clang::Expr::ConstantExprKind) const (/opt/llvm/bin/clangd+0x687ab4) #7 0x0000000001aa0a90 clang::Sema::PopExpressionEvaluationContext() (/opt/llvm/bin/clangd+0x1aa0a90) #8 0x000000000196a9c8 clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*, bool) (/opt/llvm/bin/clangd+0x196a9c8) #9 0x00000000016b4c1d clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/opt/llvm/bin/clangd+0x16b4c1d) #10 0x0000000001613baf clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/opt/llvm/bin/clangd+0x1613baf) #11 0x000000000162f519 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/llvm/bin/clangd+0x162f519) #12 0x0000000001612b0b clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/llvm/bin/clangd+0x1612b0b) #13 0x00000000016125dc clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/opt/llvm/bin/clangd+0x16125dc) #14 0x0000000001611afe clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x1611afe) #15 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&) (/opt/llvm/bin/clangd+0x16419a3) #16 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582) #17 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributesWithRange&, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9) #18 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3) #19 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&) (/opt/llvm/bin/clangd+0x16419a3) #20 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582) #21 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributesWithRange&, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9) #22 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3) #23 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&) (/opt/llvm/bin/clangd+0x16419a3) #24 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582) #25 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributesWithRange&, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9) #26 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3) #27 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&) (/opt/llvm/bin/clangd+0x16419a3) #28 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582) #29 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributesWithRange&, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9) #30 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3) #31 0x0000000001610218 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr&, bool) (/opt/llvm/bin/clangd+0x1610218) #32 0x000000000160fd97 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr&) (/opt/llvm/bin/clangd+0x160fd97) #33 0x000000000160c48c clang::ParseAST(clang::Sema&, bool, bool) (/opt/llvm/bin/clangd+0x160c48c) #34 0x000000000145b719 clang::FrontendAction::Execute() (/opt/llvm/bin/clangd+0x145b719) #35 0x0000000000c1a2b1 clang::clangd::ParsedAST::build(llvm::StringRef, clang::clangd::ParseInputs const&, std::unique_ptr >, llvm::ArrayRef, std::shared_ptr) (/opt/llvm/bin/clangd+0xc1a2b1) #36 0x0000000000c90a37 clang::clangd::(anonymous namespace)::ASTWorker::updatePreamble(std::unique_ptr >, clang::clangd::ParseInputs, std::shared_ptr, std::vector >, clang::clangd::WantDiagnostics)::$_2::operator()() TUScheduler.cpp:0:0 #37 0x0000000000c8c56a clang::clangd::(anonymous namespace)::ASTWorker::runTask(llvm::StringRef, llvm::function_ref) TUScheduler.cpp:0:0 #38 0x0000000000c8bfde void llvm::detail::UniqueFunctionBase::CallImpl(void*) TUScheduler.cpp:0:0 #39 0x0000000000e17ef2 void* llvm::thread::ThreadProxy)::$_1> >(void*) Threading.cpp:0:0 #40 0x00007905fa3e4609 start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x8609) #41 0x00007905f9f15353 __clone (/lib/x86_64-linux-gnu/libc.so.6+0x11f353) Signalled during AST worker action: Build AST Filename: source/extensions/filters/http/cache/cache_filter.cc ```
@ravenblackx
Copy link
Author

Looks like it's resolved in the latest version and just needs a release.

Tested and resolved for the meantime by:

wget https://github.com/clangd/clangd/releases/download/19.1.0/clangd-linux-19.1.0.zip
unzip clangd-linux-19.1.0.zip

and adding in settings.json

  "clangd.path": "/full/path/to/clangd_19.1.0/bin/clangd"

Now I look further into it, it appears the envoy dev container may have an ancient clangd by default:

$ which clangd
/opt/llvm/bin/clangd
$ ls -l /opt/llvm/bin/clangd
-rwxr-xr-x 1 root root 51910152 Mar 24  2022 /opt/llvm/bin/clangd

Sorry to have bothered!

@EugeneZelenko EugeneZelenko added clangd crash Prefer [crash-on-valid] or [crash-on-invalid] and removed new issue labels Sep 19, 2024
@llvmbot
Copy link

llvmbot commented Sep 19, 2024

@llvm/issue-subscribers-clangd

Author: Raven Black (ravenblackx)

Crashing while work in progress on some envoy code.

I made a branch to capture the complete code state at the time of the crash - this consistently occurs within a few seconds of starting up the window with the code in this state and only the cache_filter.cc tab open.

The compilation database has been freshly generated (I don't know if that's relevant) via envoy's script for that purpose.

I definitely don't expect it to compile in this half-modified state, but I also would prefer not to expect the clangd server to crash and drop core dumps into my workspace. :)

Edit: I disabled several other extensions to make sure it wasn't interference, the remaining non-disabled extensions that could feasibly be related are C/C++ Themes (Microsoft), Bazel, Github Pull Requests and clangd v0.1.29.

<details>
<summary>Stack trace and surrounding log</summary>

I[14:44:53.854] &lt;-- reply(1)
I[14:44:53.854] --&gt; reply:textDocument/documentSymbol(9) 3439 ms
I[14:44:53.855] --&gt; reply:textDocument/hover(10) 1997 ms, error: Task was cancelled.
I[14:44:53.855] --&gt; reply:textDocument/hover(11) 465 ms, error: Task was cancelled.
I[14:44:53.855] --&gt; textDocument/clangd.fileStatus
[Error - 2:44:53 PM] Request textDocument/hover failed.
[object Object]
[Error - 2:44:53 PM] Request textDocument/hover failed.
[object Object]
 #<!-- -->0 0x000000000053b893 llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) (/opt/llvm/bin/clangd+0x53b893)
 #<!-- -->1 0x000000000053991c llvm::sys::RunSignalHandlers() (/opt/llvm/bin/clangd+0x53991c)
 #<!-- -->2 0x000000000053bbff SignalHandler(int) Signals.cpp:0:0
 #<!-- -->3 0x00007905fa3f0420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #<!-- -->4 0x00000000006d0a4f clang::StmtVisitorBase&lt;llvm::make_const_ptr, (anonymous namespace)::RecordExprEvaluator, bool&gt;::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
 #<!-- -->5 0x0000000000687e44 EvaluateInPlace(clang::APValue&amp;, (anonymous namespace)::EvalInfo&amp;, (anonymous namespace)::LValue const&amp;, clang::Expr const*, bool) ExprConstant.cpp:0:0
 #<!-- -->6 0x0000000000687ab4 clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&amp;, clang::ASTContext const&amp;, clang::Expr::ConstantExprKind) const (/opt/llvm/bin/clangd+0x687ab4)
 #<!-- -->7 0x0000000001aa0a90 clang::Sema::PopExpressionEvaluationContext() (/opt/llvm/bin/clangd+0x1aa0a90)
 #<!-- -->8 0x000000000196a9c8 clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*, bool) (/opt/llvm/bin/clangd+0x196a9c8)
 #<!-- -->9 0x00000000016b4c1d clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&amp;) (/opt/llvm/bin/clangd+0x16b4c1d)
#<!-- -->10 0x0000000001613baf clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&amp;, clang::Parser::ParsedTemplateInfo const&amp;, clang::Parser::LateParsedAttrList*) (/opt/llvm/bin/clangd+0x1613baf)
#<!-- -->11 0x000000000162f519 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&amp;, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/llvm/bin/clangd+0x162f519)
#<!-- -->12 0x0000000001612b0b clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&amp;, clang::ParsingDeclSpec&amp;, clang::AccessSpecifier) (/opt/llvm/bin/clangd+0x1612b0b)
#<!-- -->13 0x00000000016125dc clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&amp;, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/opt/llvm/bin/clangd+0x16125dc)
#<!-- -->14 0x0000000001611afe clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&amp;, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x1611afe)
#<!-- -->15 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector&lt;clang::Parser::InnerNamespaceInfo, 4u&gt; const&amp;, unsigned int, clang::SourceLocation&amp;, clang::ParsedAttributes&amp;, clang::BalancedDelimiterTracker&amp;) (/opt/llvm/bin/clangd+0x16419a3)
#<!-- -->16 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582)
#<!-- -->17 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::ParsedAttributesWithRange&amp;, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9)
#<!-- -->18 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&amp;, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3)
#<!-- -->19 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector&lt;clang::Parser::InnerNamespaceInfo, 4u&gt; const&amp;, unsigned int, clang::SourceLocation&amp;, clang::ParsedAttributes&amp;, clang::BalancedDelimiterTracker&amp;) (/opt/llvm/bin/clangd+0x16419a3)
#<!-- -->20 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582)
#<!-- -->21 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::ParsedAttributesWithRange&amp;, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9)
#<!-- -->22 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&amp;, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3)
#<!-- -->23 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector&lt;clang::Parser::InnerNamespaceInfo, 4u&gt; const&amp;, unsigned int, clang::SourceLocation&amp;, clang::ParsedAttributes&amp;, clang::BalancedDelimiterTracker&amp;) (/opt/llvm/bin/clangd+0x16419a3)
#<!-- -->24 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582)
#<!-- -->25 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::ParsedAttributesWithRange&amp;, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9)
#<!-- -->26 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&amp;, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3)
#<!-- -->27 0x00000000016419a3 clang::Parser::ParseInnerNamespace(llvm::SmallVector&lt;clang::Parser::InnerNamespaceInfo, 4u&gt; const&amp;, unsigned int, clang::SourceLocation&amp;, clang::ParsedAttributes&amp;, clang::BalancedDelimiterTracker&amp;) (/opt/llvm/bin/clangd+0x16419a3)
#<!-- -->28 0x0000000001641582 clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::SourceLocation) (/opt/llvm/bin/clangd+0x1641582)
#<!-- -->29 0x00000000016294a9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&amp;, clang::ParsedAttributesWithRange&amp;, clang::SourceLocation*) (/opt/llvm/bin/clangd+0x16294a9)
#<!-- -->30 0x00000000016112c3 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&amp;, clang::ParsingDeclSpec*) (/opt/llvm/bin/clangd+0x16112c3)
#<!-- -->31 0x0000000001610218 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr&lt;clang::DeclGroupRef&gt;&amp;, bool) (/opt/llvm/bin/clangd+0x1610218)
#<!-- -->32 0x000000000160fd97 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr&lt;clang::DeclGroupRef&gt;&amp;) (/opt/llvm/bin/clangd+0x160fd97)
#<!-- -->33 0x000000000160c48c clang::ParseAST(clang::Sema&amp;, bool, bool) (/opt/llvm/bin/clangd+0x160c48c)
#<!-- -->34 0x000000000145b719 clang::FrontendAction::Execute() (/opt/llvm/bin/clangd+0x145b719)
#<!-- -->35 0x0000000000c1a2b1 clang::clangd::ParsedAST::build(llvm::StringRef, clang::clangd::ParseInputs const&amp;, std::unique_ptr&lt;clang::CompilerInvocation, std::default_delete&lt;clang::CompilerInvocation&gt; &gt;, llvm::ArrayRef&lt;clang::clangd::Diag&gt;, std::shared_ptr&lt;clang::clangd::PreambleData const&gt;) (/opt/llvm/bin/clangd+0xc1a2b1)
#<!-- -->36 0x0000000000c90a37 clang::clangd::(anonymous namespace)::ASTWorker::updatePreamble(std::unique_ptr&lt;clang::CompilerInvocation, std::default_delete&lt;clang::CompilerInvocation&gt; &gt;, clang::clangd::ParseInputs, std::shared_ptr&lt;clang::clangd::PreambleData const&gt;, std::vector&lt;clang::clangd::Diag, std::allocator&lt;clang::clangd::Diag&gt; &gt;, clang::clangd::WantDiagnostics)::$_2::operator()() TUScheduler.cpp:0:0
#<!-- -->37 0x0000000000c8c56a clang::clangd::(anonymous namespace)::ASTWorker::runTask(llvm::StringRef, llvm::function_ref&lt;void ()&gt;) TUScheduler.cpp:0:0
#<!-- -->38 0x0000000000c8bfde void llvm::detail::UniqueFunctionBase&lt;void&gt;::CallImpl&lt;clang::clangd::(anonymous namespace)::ASTWorker::create(llvm::StringRef, clang::clangd::GlobalCompilationDatabase const&amp;, clang::clangd::TUScheduler::ASTCache&amp;, clang::clangd::TUScheduler::HeaderIncluderCache&amp;, clang::clangd::AsyncTaskRunner*, clang::clangd::Semaphore&amp;, clang::clangd::TUScheduler::Options const&amp;, clang::clangd::ParsingCallbacks&amp;)::$_6&gt;(void*) TUScheduler.cpp:0:0
#<!-- -->39 0x0000000000e17ef2 void* llvm::thread::ThreadProxy&lt;std::tuple&lt;clang::clangd::AsyncTaskRunner::runAsync(llvm::Twine const&amp;, llvm::unique_function&lt;void ()&gt;)::$_1&gt; &gt;(void*) Threading.cpp:0:0
#<!-- -->40 0x00007905fa3e4609 start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x8609)
#<!-- -->41 0x00007905f9f15353 __clone (/lib/x86_64-linux-gnu/libc.so.6+0x11f353)
Signalled during AST worker action: Build AST
  Filename: source/extensions/filters/http/cache/cache_filter.cc

@ravenblackx
Copy link
Author

ravenblackx commented Sep 19, 2024

(Related suggestion, maybe the clangd extension should notify somewhere prominent if the clangd server is ancient so that chumps like me don't waste your time filing bugs that were fixed a century ago! It's non-obvious at the user-level that the extension is disconnected from the server version.)

@HighCommander4
Copy link
Collaborator

Related suggestion, maybe the clangd extension should notify somewhere prominent if the clangd server is ancient so that chumps like me don't waste your time filing bugs that were fixed a century ago! It's non-obvious at the user-level that the extension is disconnected from the server version.

Could you file an issue at https://github.com/clangd/vscode-clangd/issues with this suggestion please, so we don't forget about it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clangd crash Prefer [crash-on-valid] or [crash-on-invalid]
Projects
None yet
Development

No branches or pull requests

4 participants