trailofbits / vast

VAST is an experimental compiler pipeline designed for program analysis of C and C++. It provides a tower of IRs as MLIR dialects to choose the best fit representations for a program analysis or further program abstraction.
https://trailofbits.github.io/vast/
Apache License 2.0
368 stars 23 forks source link

[Bug]: fallthrough attribute crashes `vast-front` #639

Closed PappasBrent closed 5 days ago

PappasBrent commented 6 days ago

VAST version

Ubuntu clang version 18.1.8 (++20240615103753+3b5b5c1ec4a3-1~exp1~20240615223858.136) Target: x86_64-pc-linux-gnu Thread model: posix

LLVM version

1:18.1.8

Operating system

Ubuntu 22.04.4 LTS x86_64

Description

vast-front crashes with the following stack trace when attempting to lower a program containing a switch-case statement with a fallthrough attribute:

[VAST assert] next != nullptr && "try_visit_or_pass" failed
PLEASE submit a bug report to https://github.com/trailofbits/vast/issues and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: ./builds/default/tools/vast-front/Debug/vast-front -x c -vast-emit-mlir=hl test_fallthrough.c
1.      <eof> parser at end of file
 #0 0x00007f1e141a3716 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-18/lib/libLLVM.so.18.1+0xd94716)
 #1 0x00007f1e141a16d0 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-18/lib/libLLVM.so.18.1+0xd926d0)
 #2 0x00007f1e140f31f0 (/usr/lib/llvm-18/lib/libLLVM.so.18.1+0xce41f0)
 #3 0x00007f1e12e91520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x0000555bc923753b auto vast::cg::try_or_through_list_node<vast::cg::unsup_visitor>::try_visit_or_pass<clang::Stmt const*&, vast::cg::scope_context&>(clang::Stmt const*&, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:162:13
 #5 0x0000555bc9232975 vast::cg::try_or_through_list_node<vast::cg::unsup_visitor>::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:167:82
 #6 0x0000555bc923128e auto vast::cg::try_or_through_list_node<vast::cg::default_visitor>::try_visit_or_pass<clang::Stmt const*&, vast::cg::scope_context&>(clang::Stmt const*&, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:163:13
 #7 0x0000555bc92302c5 vast::cg::try_or_through_list_node<vast::cg::default_visitor>::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:167:82
 #8 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
 #9 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
#10 0x0000555bc922ae42 vast::cg::visitor_list::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:103:82
#11 0x0000555bc92389e9 vast::cg::visitor_view::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:15:9
#12 0x0000555bc9238b31 vast::cg::scoped_visitor_view::visit(clang::Stmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:39:9
#13 0x0000555bc92e23e4 vast::cg::block_generator::emit(clang::CompoundStmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenBlock.cpp:19:21
#14 0x0000555bc929010e vast::cg::default_stmt_visitor::VisitCompoundStmt(clang::CompoundStmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/DefaultStmtVisitor.cpp:102:9
#15 0x0000555bc9246fba clang::StmtVisitorBase<llvm::make_const_ptr, vast::cg::default_stmt_visitor, mlir::Operation*>::Visit(clang::Stmt const*) /usr/lib/llvm-18/include/clang/AST/StmtNodes.inc:1498:1
#16 0x0000555bc92439bd vast::cg::default_stmt_visitor::visit(clang::Stmt const*) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/DefaultStmtVisitor.hpp:23:50
#17 0x0000555bc9243956 vast::cg::default_visitor::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/DefaultVisitor.cpp:20:9
#18 0x0000555bc92311f0 auto vast::cg::try_or_through_list_node<vast::cg::default_visitor>::try_visit_or_pass<clang::Stmt const*&, vast::cg::scope_context&>(clang::Stmt const*&, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:158:22
#19 0x0000555bc92302c5 vast::cg::try_or_through_list_node<vast::cg::default_visitor>::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:167:82
#20 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
#21 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
#22 0x0000555bc922ae42 vast::cg::visitor_list::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:103:82
#23 0x0000555bc92389e9 vast::cg::visitor_view::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:15:9
#24 0x0000555bc9238b31 vast::cg::scoped_visitor_view::visit(clang::Stmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:39:9
#25 0x0000555bc92a8073 auto vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(auto&, auto)::operator()<mlir::OpBuilder, mlir::Location>(auto&, auto) const /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/ClangVisitorBase.hpp:77:13
#26 0x0000555bc92a801d void llvm::function_ref<void (mlir::OpBuilder&, mlir::Location)>::callback_fn<vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(auto&, auto) const>(long, mlir::OpBuilder&, mlir::Location) /usr/lib/llvm-18/include/llvm/ADT/STLFunctionalExtras.h:45:5
#27 0x0000555bc94da5e1 llvm::function_ref<void (mlir::OpBuilder&, mlir::Location)>::operator()(mlir::OpBuilder&, mlir::Location) const /usr/lib/llvm-18/include/llvm/ADT/STLFunctionalExtras.h:68:5
#28 0x0000555bc94da53a vast::build_region(mlir::Region*, mlir::OpBuilder&, mlir::OperationState&, llvm::function_ref<void (mlir::OpBuilder&, mlir::Location)>) /home/bpappas/github.com/trailofbits/vast/lib/vast/Util/Region.cpp:25:16
#29 0x0000555bc94da489 vast::build_region(mlir::OpBuilder&, mlir::OperationState&, llvm::function_ref<void (mlir::OpBuilder&, mlir::Location)>) /home/bpappas/github.com/trailofbits/vast/lib/vast/Util/Region.cpp:12:9
#30 0x0000555bc8f5395f vast::hl::SwitchOp::build(mlir::OpBuilder&, mlir::OperationState&, llvm::function_ref<void (mlir::OpBuilder&, mlir::Location)>, llvm::function_ref<void (mlir::OpBuilder&, mlir::Location)>) /home/bpappas/github.com/trailofbits/vast/lib/vast/Dialect/HighLevel/HighLevelOps.cpp:576:9
#31 0x0000555bc92a8c7f auto mlir::OpBuilder::create<vast::hl::SwitchOp, auto vast::cg::clang_visitor_base::mk_stmt_builder<vast::hl::ValueYieldOp>(clang::Stmt const*)::'lambda'(auto&, auto) const&, vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(auto&, auto) const&>(mlir::Location, auto vast::cg::clang_visitor_base::mk_stmt_builder<vast::hl::ValueYieldOp>(clang::Stmt const*)::'lambda'(auto&, auto) const&, vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(auto&, auto) const&) /usr/lib/llvm-18/include/mlir/IR/Builders.h:494:5
#32 0x0000555bc92a8b6b auto auto vast::cg::codegen_builder::compose<vast::hl::SwitchOp>()::'lambda'(auto&&...)::operator()<mlir::Location const, auto vast::cg::clang_visitor_base::mk_stmt_builder<vast::hl::ValueYieldOp>(clang::Stmt const*)::'lambda'(auto&, auto) const&, vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(auto&, auto) const&>(auto&&...) const /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenBuilder.hpp:260:24
#33 0x0000555bc92a8add auto auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::codegen_builder::compose<vast::hl::SwitchOp>()::'lambda'(auto&&...)>::bind<mlir::Location>(std::optional<mlir::Location>&&) &&::'lambda'(auto&&...)::operator()<auto vast::cg::clang_visitor_base::mk_stmt_builder<vast::hl::ValueYieldOp>(clang::Stmt const*)::'lambda'(mlir::Location&, auto) const&, vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(mlir::Location&, auto) const&>(auto&&...) const /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenBuilder.hpp:57:24
#34 0x0000555bc92a8a34 auto auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::codegen_builder::compose<vast::hl::SwitchOp>()::'lambda'(auto&&...)>::bind<mlir::Location>(std::optional<mlir::Location>&&) &&::'lambda'(auto&&...)>::bind_always<auto vast::cg::clang_visitor_base::mk_stmt_builder<vast::hl::ValueYieldOp>(clang::Stmt const*)::'lambda'(mlir::Location&, auto)>(auto&&...) &&::'lambda'(auto&&...)::operator()<vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(mlir::Location&, auto) const&>(auto&&...) const /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenBuilder.hpp:65:24
#35 0x0000555bc92a89fc auto auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::codegen_builder::compose<vast::hl::SwitchOp>()::'lambda'(auto&&...)>::bind<mlir::Location>(std::optional<mlir::Location>&&) &&::'lambda'(auto&&...)>::bind_always<auto vast::cg::clang_visitor_base::mk_stmt_builder<vast::hl::ValueYieldOp>(clang::Stmt const*)::'lambda'(mlir::Location&, auto)>(auto&&...) &&::'lambda'(auto&&...)>::bind_always<vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(mlir::Location&, auto)>(auto&&...) &&::'lambda'(auto&&...)::operator()<>(auto&&...) const /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenBuilder.hpp:65:24
#36 0x0000555bc9299355 vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::compose_state_t<vast::hl::SwitchOp, auto vast::cg::codegen_builder::compose<vast::hl::SwitchOp>()::'lambda'(auto&&...)>::bind<mlir::Location>(std::optional<mlir::Location>&&) &&::'lambda'(auto&&...)>::bind_always<auto vast::cg::clang_visitor_base::mk_stmt_builder<vast::hl::ValueYieldOp>(clang::Stmt const*)::'lambda'(mlir::Location&, auto)>(auto&&...) &&::'lambda'(auto&&...)>::bind_always<vast::cg::clang_visitor_base::mk_optional_region_builder(clang::Stmt const*)::'lambda'(mlir::Location&, auto)>(auto&&...) &&::'lambda'(auto&&...)>::freeze() /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenBuilder.hpp:162:32
#37 0x0000555bc92990b0 vast::cg::default_stmt_visitor::VisitSwitchStmt(clang::SwitchStmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/DefaultStmtVisitor.cpp:739:14
#38 0x0000555bc9246738 clang::StmtVisitorBase<llvm::make_const_ptr, vast::cg::default_stmt_visitor, mlir::Operation*>::Visit(clang::Stmt const*) /usr/lib/llvm-18/include/clang/AST/StmtNodes.inc:864:1
#39 0x0000555bc92439bd vast::cg::default_stmt_visitor::visit(clang::Stmt const*) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/DefaultStmtVisitor.hpp:23:50
#40 0x0000555bc9243956 vast::cg::default_visitor::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/DefaultVisitor.cpp:20:9
#41 0x0000555bc92311f0 auto vast::cg::try_or_through_list_node<vast::cg::default_visitor>::try_visit_or_pass<clang::Stmt const*&, vast::cg::scope_context&>(clang::Stmt const*&, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:158:22
#42 0x0000555bc92302c5 vast::cg::try_or_through_list_node<vast::cg::default_visitor>::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:167:82
#43 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
#44 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
#45 0x0000555bc922ae42 vast::cg::visitor_list::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:103:82
#46 0x0000555bc92389e9 vast::cg::visitor_view::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:15:9
#47 0x0000555bc9238b31 vast::cg::scoped_visitor_view::visit(clang::Stmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:39:9
#48 0x0000555bc92e23e4 vast::cg::block_generator::emit(clang::CompoundStmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenBlock.cpp:19:21
#49 0x0000555bc929010e vast::cg::default_stmt_visitor::VisitCompoundStmt(clang::CompoundStmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/DefaultStmtVisitor.cpp:102:9
#50 0x0000555bc9246fba clang::StmtVisitorBase<llvm::make_const_ptr, vast::cg::default_stmt_visitor, mlir::Operation*>::Visit(clang::Stmt const*) /usr/lib/llvm-18/include/clang/AST/StmtNodes.inc:1498:1
#51 0x0000555bc92439bd vast::cg::default_stmt_visitor::visit(clang::Stmt const*) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/DefaultStmtVisitor.hpp:23:50
#52 0x0000555bc9243956 vast::cg::default_visitor::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/DefaultVisitor.cpp:20:9
#53 0x0000555bc92311f0 auto vast::cg::try_or_through_list_node<vast::cg::default_visitor>::try_visit_or_pass<clang::Stmt const*&, vast::cg::scope_context&>(clang::Stmt const*&, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:158:22
#54 0x0000555bc92302c5 vast::cg::try_or_through_list_node<vast::cg::default_visitor>::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:167:82
#55 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
#56 0x0000555bc922bda2 vast::cg::fallthrough_list_node::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:125:82
#57 0x0000555bc922ae42 vast::cg::visitor_list::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/CodeGenVisitorList.hpp:103:82
#58 0x0000555bc92389e9 vast::cg::visitor_view::visit(clang::Stmt const*, vast::cg::scope_context&) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:15:9
#59 0x0000555bc9238b31 vast::cg::scoped_visitor_view::visit(clang::Stmt const*) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenVisitorBase.cpp:39:9
#60 0x0000555bc9287b3c vast::cg::function_generator::emit_body(clang::FunctionDecl const*, vast::hl::FuncOp) /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenFunction.cpp:125:21
#61 0x0000555bc928b3aa vast::cg::function_generator::emit(clang::FunctionDecl const*)::$_0::operator()() /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenFunction.cpp:87:17
#62 0x0000555bc928b305 void std::__invoke_impl<void, vast::cg::function_generator::emit(clang::FunctionDecl const*)::$_0&>(std::__invoke_other, vast::cg::function_generator::emit(clang::FunctionDecl const*)::$_0&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61:7
#63 0x0000555bc928b2c5 std::enable_if<is_invocable_r_v<void, vast::cg::function_generator::emit(clang::FunctionDecl const*)::$_0&>, void>::type std::__invoke_r<void, vast::cg::function_generator::emit(clang::FunctionDecl const*)::$_0&>(vast::cg::function_generator::emit(clang::FunctionDecl const*)::$_0&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:117:5
#64 0x0000555bc928b19d std::_Function_handler<void (), vast::cg::function_generator::emit(clang::FunctionDecl const*)::$_0>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290:2
#65 0x0000555bc9225145 std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:2
#66 0x0000555bc9224fd5 vast::cg::scope_context::finalize() /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/ScopeContext.hpp:143:17
#67 0x0000555bc9225025 vast::cg::scope_context::finalize() /home/bpappas/github.com/trailofbits/vast/include/vast/CodeGen/ScopeContext.hpp:148:34
#68 0x0000555bc923872d vast::cg::module_generator::finalize() /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenModule.cpp:26:61
#69 0x0000555bc921b8b0 vast::cg::driver::finalize() /home/bpappas/github.com/trailofbits/vast/lib/vast/CodeGen/CodeGenDriver.cpp:70:19
#70 0x0000555bc9213076 vast::cc::vast_consumer::HandleTranslationUnit(clang::ASTContext&) /home/bpappas/github.com/trailofbits/vast/lib/vast/Frontend/Consumer.cpp:67:5
#71 0x0000555bc92138f7 vast::cc::vast_stream_consumer::HandleTranslationUnit(clang::ASTContext&) /home/bpappas/github.com/trailofbits/vast/lib/vast/Frontend/Consumer.cpp:125:15
#72 0x00007f1e1b5bdfc6 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0xb7ffc6)
#73 0x0000555bc8debb75 vast::cc::vast_stream_action::ExecuteAction() /home/bpappas/github.com/trailofbits/vast/lib/vast/Frontend/Action.cpp:75:5
#74 0x00007f1e1d3eeab5 clang::FrontendAction::Execute() (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x29b0ab5)
#75 0x00007f1e1d368084 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x292a084)
#76 0x0000555bc8dd3a87 vast::cc::execute_compiler_invocation(clang::CompilerInstance*, vast::cc::vast_args const&) /home/bpappas/github.com/trailofbits/vast/tools/vast-front/compiler_invocation.cpp:101:28
#77 0x0000555bc8de8180 vast::cc::cc1(vast::cc::vast_args const&, llvm::ArrayRef<char const*>, char const*, void*) /home/bpappas/github.com/trailofbits/vast/tools/vast-front/cc1.cpp:116:23
#78 0x0000555bc8dd91b4 execute_cc1_tool(llvm::SmallVectorImpl<char const*>&) /home/bpappas/github.com/trailofbits/vast/tools/vast-front/driver.cpp:71:16
#79 0x0000555bc8de418d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<int (*)(llvm::SmallVectorImpl<char const*>&)>(long, llvm::SmallVectorImpl<char const*>&) /usr/lib/llvm-18/include/llvm/ADT/STLFunctionalExtras.h:45:5
#80 0x00007f1e1d0205c9 (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x25e25c9)
#81 0x00007f1e140f2f8c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/llvm-18/lib/libLLVM.so.18.1+0xce3f8c)
#82 0x00007f1e1d01ff5e clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x25e1f5e)
#83 0x00007f1e1cfe84d1 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x25aa4d1)
#84 0x00007f1e1cfe871e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x25aa71e)
#85 0x00007f1e1d004d2d clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x25c6d2d)
#86 0x0000555bc8dd984a vast::cc::driver::execute() /home/bpappas/github.com/trailofbits/vast/include/vast/Frontend/Driver.hpp:180:30
#87 0x0000555bc8dd8848 main /home/bpappas/github.com/trailofbits/vast/tools/vast-front/driver.cpp:161:19
#88 0x00007f1e12e78d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#89 0x00007f1e12e78e40 call_init ./csu/../csu/libc-start.c:128:20
#90 0x00007f1e12e78e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#91 0x0000555bc8dd2485 _start (./builds/default/tools/vast-front/Debug/vast-front+0xe48485)
vast-front: error: clang frontend command failed with exit code 132 (use -v to see invocation)
Ubuntu clang version 18.1.8 (++20240615103753+3b5b5c1ec4a3-1~exp1~20240615223858.136)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /home/bpappas/github.com/trailofbits/vast/./builds/default/tools/vast-front/Debug
vast-front: error: unable to execute command: Illegal instruction (core dumped)
vast-front: note: diagnostic msg: Error generating preprocessed source(s).

Steps to Reproduce

I have confirmed that this issue occurs when running both the release and debug version of vast-front.

Steps to Reproduce

Create a file test_fallthrough.c with the following contents:

int main(void) {
    int x;

    switch (x) {
        case 0:
            (void)x;
            [[fallthrough]];
        default:
            break;
    }

    return 0;
}

Run vast-front on the file like so:

vast-front -x c -vast-emit-mlir=hl test.c
lkorenc commented 5 days ago

I fixed the bug that manifested in a crash, however I did not add support for the attribute in hl, that should be a separate issue.