[llvm-bugs] [Bug 48226] New: z3 sort equality assertion failed on scoped enum cast to integer.
via llvm-bugs
llvm-bugs at lists.llvm.org
Wed Nov 18 19:45:46 PST 2020
https://bugs.llvm.org/show_bug.cgi?id=48226
Bug ID: 48226
Summary: z3 sort equality assertion failed on scoped enum cast
to integer.
Product: clang
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Static Analyzer
Assignee: dcoughlin at apple.com
Reporter: info at ustchcs.com
CC: dcoughlin at apple.com, llvm-bugs at lists.llvm.org
Created attachment 24183
--> https://bugs.llvm.org/attachment.cgi?id=24183&action=edit
stack-dump
Test case:
(excerpted from llvm/include/llvm/Analysis/AliasAnalysis.h)
/////////////////////////////////// test.cpp //////////////////////////////
enum class ModRefInfo : unsigned char {
/// Must is provided for completeness, but no routines will return only
/// Must today. See definition of Must below.
Must = 0,
/// The access may reference the value stored in memory,
/// a mustAlias relation was found, and no mayAlias or partialAlias found.
MustRef = 1,
/// The access may modify the value stored in memory,
/// a mustAlias relation was found, and no mayAlias or partialAlias found.
MustMod = 2,
/// The access may reference, modify or both the value stored in memory,
/// a mustAlias relation was found, and no mayAlias or partialAlias found.
MustModRef = MustRef | MustMod,
/// The access neither references nor modifies the value stored in memory.
NoModRef = 4,
/// The access may reference the value stored in memory.
Ref = NoModRef | MustRef,
/// The access may modify the value stored in memory.
Mod = NoModRef | MustMod,
/// The access may reference and may modify the value stored in memory.
ModRef = Ref | Mod,
};
inline ModRefInfo intersectModRef(const ModRefInfo MRI1,
const ModRefInfo MRI2) {
return ModRefInfo(static_cast<int>(MRI1) & static_cast<int>(MRI2));
}
ModRefInfo getModRefInfo(const ModRefInfo MRI) {
ModRefInfo Result = ModRefInfo::ModRef;
Result = intersectModRef(Result, MRI);
return Result;
}
///////////////////////////////////////////////////////////////////////////////
(llvm commit: 37c74dfe72ecf4e7def22702c5a944682a7865df)
Invocation:
clang-tidy -checks=-*,clang-analyzer-* test.cpp \
--allow-enabling-analyzer-alpha-checkers \
-- -Xclang -analyzer-constraints -Xclang z3 \
-Xclang -analyzer-config \
-Xclang aggressive-binary-operation-simplification=true
Stack Dump:
clang-tidy:
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:96:
static const llvm::SMTExpr*
clang::ento::SMTConv::fromBinOp(llvm::SMTSolverRef&, const llvm::SMTExpr*
const&, clang::BinaryOperator::Opcode, const llvm::SMTExpr* const&, bool):
Assertion `*Solver->getSort(LHS) == *Solver->getSort(RHS) && "AST's must have
the same sort!"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
backtrace.
Stack dump:
0. Program arguments: clang-tidy -checks=-*,clang-analyzer-*
--allow-enabling-analyzer-alpha-checkers test.cpp -- -Xclang
-analyzer-constraints -Xclang z3 -Xclang -analyzer-config -Xclang
aggressive-binary-operation-simplification=true
1. <eof> parser at end of file
2. While analyzing stack:
#0 Calling intersectModRef at line 35
#1 Calling getModRefInfo
3. /root/test.cpp:28:10: Error evaluating statement
4. /root/test.cpp:28:10: Error evaluating statement
#0 0x00007f70a1c66b43 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
/workdir/llvm-project/llvm/lib/Support/Unix/Signals.inc:563:22
#1 0x00007f70a1c66bfa PrintStackTraceSignalHandler(void*)
/workdir/llvm-project/llvm/lib/Support/Unix/Signals.inc:630:1
#2 0x00007f70a1c64bdd llvm::sys::RunSignalHandlers()
/workdir/llvm-project/llvm/lib/Support/Signals.cpp:71:20
#3 0x00007f70a1c6658b SignalHandler(int)
/workdir/llvm-project/llvm/lib/Support/Unix/Signals.inc:405:1
#4 0x00007f70a18a6730 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x12730)
#5 0x00007f709b1817bb raise (/lib/x86_64-linux-gnu/libc.so.6+0x377bb)
#6 0x00007f709b16c535 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22535)
#7 0x00007f709b16c40f (/lib/x86_64-linux-gnu/libc.so.6+0x2240f)
#8 0x00007f709b17a102 (/lib/x86_64-linux-gnu/libc.so.6+0x30102)
#9 0x00007f70947b7588
clang::ento::SMTConv::fromBinOp(std::shared_ptr<llvm::SMTSolver>&,
llvm::SMTExpr const* const&, clang::BinaryOperatorKind, llvm::SMTExpr const*
const&, bool)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:95:5
#10 0x00007f70947b86fe
clang::ento::SMTConv::getBinExpr(std::shared_ptr<llvm::SMTSolver>&,
clang::ASTContext&, llvm::SMTExpr const* const&, clang::QualType,
clang::BinaryOperatorKind, llvm::SMTExpr const* const&, clang::QualType,
clang::QualType*)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:377:3
#11 0x00007f70947b8a2f
clang::ento::SMTConv::getSymBinExpr(std::shared_ptr<llvm::SMTSolver>&,
clang::ASTContext&, clang::ento::BinarySymExpr const*, bool*, clang::QualType*)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:396:24
#12 0x00007f70947b8e67
clang::ento::SMTConv::getSymExpr(std::shared_ptr<llvm::SMTSolver>&,
clang::ASTContext&, clang::ento::SymExpr const*, clang::QualType*, bool*)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:451:24
#13 0x00007f70947b88f7
clang::ento::SMTConv::getSymBinExpr(std::shared_ptr<llvm::SMTSolver>&,
clang::ASTContext&, clang::ento::BinarySymExpr const*, bool*, clang::QualType*)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:391:69
#14 0x00007f70947b8e67
clang::ento::SMTConv::getSymExpr(std::shared_ptr<llvm::SMTSolver>&,
clang::ASTContext&, clang::ento::SymExpr const*, clang::QualType*, bool*)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:451:24
#15 0x00007f70947b8ef6
clang::ento::SMTConv::getExpr(std::shared_ptr<llvm::SMTSolver>&,
clang::ASTContext&, clang::ento::SymExpr const*, clang::QualType*, bool*)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h:474:3
#16 0x00007f709496945c
clang::ento::SMTConstraintManager::assumeSym(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState
const>, clang::ento::SymExpr const*, bool)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h:51:66
#17 0x00007f709495cc63
clang::ento::SimpleConstraintManager::assumeAux(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState
const>, clang::ento::NonLoc, bool)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp:73:44
#18 0x00007f709495c946
clang::ento::SimpleConstraintManager::assume(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState
const>, clang::ento::NonLoc, bool)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp:46:44
#19 0x00007f709495c8c0
clang::ento::SimpleConstraintManager::assume(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState
const>, clang::ento::DefinedSVal, bool)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp:41:57
#20 0x00007f7092f348de
clang::ento::ProgramState::assume(clang::ento::DefinedOrUnknownSVal, bool)
const
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h:672:60
#21 0x00007f70931a3284 (anonymous
namespace)::ConstraintBasedEQEvaluator::operator()(llvm::APSInt const&)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp:49:12
#22 0x00007f70931a3ef3 bool __gnu_cxx::__ops::_Iter_pred<(anonymous
namespace)::ConstraintBasedEQEvaluator>::operator()<llvm::APSInt*>(llvm::APSInt*)
/usr/include/c++/8/bits/predefined_ops.h:283:33
#23 0x00007f70931a3db8 llvm::APSInt* std::__find_if<llvm::APSInt*,
__gnu_cxx::__ops::_Iter_pred<(anonymous namespace)::ConstraintBasedEQEvaluator>
>(llvm::APSInt*, llvm::APSInt*, __gnu_cxx::__ops::_Iter_pred<(anonymous
namespace)::ConstraintBasedEQEvaluator>, std::random_access_iterator_tag)
/usr/include/c++/8/bits/stl_algo.h:120:4
#24 0x00007f70931a3d23 llvm::APSInt* std::__find_if<llvm::APSInt*,
__gnu_cxx::__ops::_Iter_pred<(anonymous namespace)::ConstraintBasedEQEvaluator>
>(llvm::APSInt*, llvm::APSInt*, __gnu_cxx::__ops::_Iter_pred<(anonymous
namespace)::ConstraintBasedEQEvaluator>)
/usr/include/c++/8/bits/stl_algo.h:161:23
#25 0x00007f70931a3bf1 llvm::APSInt* std::find_if<llvm::APSInt*, (anonymous
namespace)::ConstraintBasedEQEvaluator>(llvm::APSInt*, llvm::APSInt*,
(anonymous namespace)::ConstraintBasedEQEvaluator)
/usr/include/c++/8/bits/stl_algo.h:3930:28
#26 0x00007f70931a3b1f bool std::none_of<llvm::APSInt*, (anonymous
namespace)::ConstraintBasedEQEvaluator>(llvm::APSInt*, llvm::APSInt*,
(anonymous namespace)::ConstraintBasedEQEvaluator)
/usr/include/c++/8/bits/stl_algo.h:526:71
#27 0x00007f70931a3a01 bool std::any_of<llvm::APSInt*, (anonymous
namespace)::ConstraintBasedEQEvaluator>(llvm::APSInt*, llvm::APSInt*,
(anonymous namespace)::ConstraintBasedEQEvaluator)
/usr/include/c++/8/bits/stl_algo.h:544:51
#28 0x00007f70931a37d4 bool llvm::any_of<llvm::SmallVector<llvm::APSInt, 6u>&,
(anonymous
namespace)::ConstraintBasedEQEvaluator>(llvm::SmallVector<llvm::APSInt, 6u>&,
(anonymous namespace)::ConstraintBasedEQEvaluator)
/workdir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:1500:21
#29 0x00007f70931a366c (anonymous
namespace)::EnumCastOutOfRangeChecker::checkPreStmt(clang::CastExpr const*,
clang::ento::CheckerContext&) const
/workdir/llvm-project/clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp:132:41
#30 0x00007f70931a3c4d void
clang::ento::check::PreStmt<clang::CastExpr>::_checkStmt<(anonymous
namespace)::EnumCastOutOfRangeChecker>(void*, clang::Stmt const*,
clang::ento::CheckerContext&)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/Checker.h:86:3
#31 0x00007f7094820e4a clang::ento::CheckerFn<void (clang::Stmt const*,
clang::ento::CheckerContext&)>::operator()(clang::Stmt const*,
clang::ento::CheckerContext&) const
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h:73:29
#32 0x00007f709481aa94 (anonymous
namespace)::CheckStmtContext::runChecker(clang::ento::CheckerFn<void
(clang::Stmt const*, clang::ento::CheckerContext&)>, clang::ento::NodeBuilder&,
clang::ento::ExplodedNode*)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp:178:5
#33 0x00007f709481d796 void expandGraphWithCheckers<(anonymous
namespace)::CheckStmtContext>((anonymous namespace)::CheckStmtContext,
clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet const&)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp:138:5
#34 0x00007f709481ab30 clang::ento::CheckerManager::runCheckersForStmt(bool,
clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet const&, clang::Stmt
const*, clang::ento::ExprEngine&, bool)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp:192:26
#35 0x00007f70948784a3
clang::ento::CheckerManager::runCheckersForPreStmt(clang::ento::ExplodedNodeSet&,
clang::ento::ExplodedNodeSet const&, clang::Stmt const*,
clang::ento::ExprEngine&)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h:253:23
#36 0x00007f7094891c61 clang::ento::ExprEngine::VisitCast(clang::CastExpr
const*, clang::Expr const*, clang::ento::ExplodedNode*,
clang::ento::ExplodedNodeSet&)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp:305:44
#37 0x00007f7094869bfa clang::ento::ExprEngine::Visit(clang::Stmt const*,
clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp:1732:25
#38 0x00007f7094865402 clang::ento::ExprEngine::ProcessStmt(clang::Stmt const*,
clang::ento::ExplodedNode*)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp:792:15
#39 0x00007f7094864784
clang::ento::ExprEngine::processCFGElement(clang::CFGElement,
clang::ento::ExplodedNode*, unsigned int, clang::ento::NodeBuilderContext*)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp:637:18
#40 0x00007f7094838628 clang::ento::CoreEngine::HandlePostStmt(clang::CFGBlock
const*, unsigned int, clang::ento::ExplodedNode*)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp:468:1
#41 0x00007f7094837273
clang::ento::CoreEngine::dispatchWorkItem(clang::ento::ExplodedNode*,
clang::ProgramPoint, clang::ento::WorkListUnit const&) (.localalias.0)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp:192:7
#42 0x00007f7094836f0d
clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*,
unsigned int, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp:147:21
#43 0x00007f70943cc0e5
clang::ento::ExprEngine::ExecuteWorkList(clang::LocationContext const*,
unsigned int)
/workdir/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h:192:34
#44 0x00007f7094356f38 (anonymous
namespace)::AnalysisConsumer::RunPathSensitiveChecks(clang::Decl*,
clang::ento::ExprEngine::InliningModes, llvm::DenseSet<clang::Decl const*,
llvm::DenseMapInfo<clang::Decl const*> >*)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:703:22
#45 0x00007f7094356d62 (anonymous
namespace)::AnalysisConsumer::HandleCode(clang::Decl*, unsigned int,
clang::ento::ExprEngine::InliningModes, llvm::DenseSet<clang::Decl const*,
llvm::DenseMapInfo<clang::Decl const*> >*)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:675:5
#46 0x00007f7094355d03 (anonymous
namespace)::AnalysisConsumer::HandleDeclsCallGraph(unsigned int)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:467:31
#47 0x00007f70943560fe (anonymous
namespace)::AnalysisConsumer::runAnalysisOnTranslationUnit(clang::ASTContext&)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:517:48
#48 0x00007f70943562d3 (anonymous
namespace)::AnalysisConsumer::HandleTranslationUnit(clang::ASTContext&)
/workdir/llvm-project/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:548:75
#49 0x00007f709781cf1b
clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&)
/workdir/llvm-project/clang/lib/Frontend/MultiplexConsumer.cpp:291:25
#50 0x00007f70917cea9e clang::ParseAST(clang::Sema&, bool, bool)
/workdir/llvm-project/clang/lib/Parse/ParseAST.cpp:178:14
#51 0x00007f70977e2421 clang::ASTFrontendAction::ExecuteAction()
/workdir/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1057:11
#52 0x00007f70977e1d89 clang::FrontendAction::Execute()
/workdir/llvm-project/clang/lib/Frontend/FrontendAction.cpp:954:38
#53 0x00007f709776666a
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/workdir/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:984:42
#54 0x00007f709fbf79b2
clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>,
clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>,
clang::DiagnosticConsumer*)
/workdir/llvm-project/clang/lib/Tooling/Tooling.cpp:410:46
#55 0x00007f709f92a666
clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&,
clang::tooling::CompilationDatabase const&,
llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool,
llvm::StringRef)::ActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>,
clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>,
clang::DiagnosticConsumer*)
/workdir/llvm-project/clang-tools-extra/clang-tidy/ClangTidy.cpp:550:50
#56 0x00007f709fbf7816 clang::tooling::ToolInvocation::runInvocation(char
const*, clang::driver::Compilation*,
std::shared_ptr<clang::CompilerInvocation>,
std::shared_ptr<clang::PCHContainerOperations>)
/workdir/llvm-project/clang/lib/Tooling/Tooling.cpp:385:31
#57 0x00007f709fbf7654 clang::tooling::ToolInvocation::run()
/workdir/llvm-project/clang/lib/Tooling/Tooling.cpp:370:23
#58 0x00007f709fbf8ceb
clang::tooling::ClangTool::run(clang::tooling::ToolAction*)
/workdir/llvm-project/clang/lib/Tooling/Tooling.cpp:563:11
#59 0x00007f709f92a9de
clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&,
clang::tooling::CompilationDatabase const&,
llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, llvm::StringRef)
/workdir/llvm-project/clang-tools-extra/clang-tidy/ClangTidy.cpp:572:28
#60 0x00007f709f81e37e clang::tidy::clangTidyMain(int, char const**)
/workdir/llvm-project/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp:453:53
#61 0x00005647eba01155 main
/workdir/llvm-project/clang-tools-extra/clang-tidy/tool/ClangTidyToolMain.cpp:20:47
#62 0x00007f709b16e09b __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x2409b)
#63 0x00005647eba0107a _start
(/workdir/llvm-project/build/llvm/bin/clang-tidy+0x107a)
test.sh: line 9: 54012 Aborted clang-tidy
-checks=-*,clang-analyzer-* --allow-enabling-analyzer-alpha-checkers test.cpp
-- -Xclang -analyzer-constraints -Xclang z3 -Xclang -analyzer-config -Xclang
aggressive-binary-operation-simplification=true
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20201119/8a749ec4/attachment-0001.html>
More information about the llvm-bugs
mailing list