r356222 - [analyzer] Support C++17 aggregates with bases without constructors.

Artem Dergachev via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 21 13:11:13 PDT 2019


This one seems to be fixed by the second patch and is looks similar to 
the testcase that's already there - https://reviews.llvm.org/D59622

Different backtraces are moderately expected :)

On 3/21/19 6:58 AM, Alexander Kornienko wrote:
> Thanks for the fix! Meanwhile, I found a couple of code samples that 
> trigger this assertion with a slightly different stack trace. Not sure 
> if they are substantially different though.
>
> #1:
> $ cat t.cc
> inline namespace a {
> class b typedef c;
> }
> class A {};
> namespace a {
> class b : A {};
> }  // namespace a
> class d {
>  public:
>   operator c();
> };
> d e() { c f{e()}; }
> $ clang-tidy -checks="-*,clang-analyzer*" t.cc -- -std=c++17
> assert.h assertion failed at 
> llvm/tools/clang/lib/StaticAnalyzer/Core/RegionStore.cpp:2362 in 
> (anonymous namespace)::RegionBindingsRef (anonymous 
> namespace)::RegionStoreManager::bindStruct(RegionBindingsConstRef, 
> const clang::ento::TypedValueRegion *, clang::ento::SVal): 
> CRD->isAggregate() && "Non-aggregates are constructed with a constructor!"
>     @     0x5605d5ca35c6  __assert_fail
>     @     0x5605d44064e4  (anonymous 
> namespace)::RegionStoreManager::bindStruct()
>     @     0x5605d43fb058  (anonymous 
> namespace)::RegionStoreManager::Bind()
>     @     0x5605d43e5d2f clang::ento::ProgramState::bindLoc()
>     @     0x5605d43975c5 
> clang::ento::ExprEngine::processPointerEscapedOnBind()
>     @     0x5605d438f143 clang::ento::ExprEngine::evalBind()
>     @     0x5605d43a46d3 clang::ento::ExprEngine::VisitDeclStmt()
>     @     0x5605d438ddff clang::ento::ExprEngine::Visit()
>     @     0x5605d438a7af clang::ento::ExprEngine::ProcessStmt()
>     @     0x5605d438a498 clang::ento::ExprEngine::processCFGElement()
>     @     0x5605d437e7f5 clang::ento::CoreEngine::HandlePostStmt()
>     @     0x5605d437dbec clang::ento::CoreEngine::ExecuteWorkList()
>     @     0x5605d40e7feb  (anonymous 
> namespace)::AnalysisConsumer::HandleCode()
>     @     0x5605d40d1dc5  (anonymous 
> namespace)::AnalysisConsumer::HandleTranslationUnit()
>     @     0x5605d46ea43c clang::MultiplexConsumer::HandleTranslationUnit()
>     @     0x5605d4854e54  clang::ParseAST()
>     @     0x5605d46cb203 clang::FrontendAction::Execute()
>     @     0x5605d4664451 clang::CompilerInstance::ExecuteAction()
>     @     0x5605d45cef61 
> clang::tooling::FrontendActionFactory::runInvocation()
>     @     0x5605d3d3e997 
> clang::tidy::runClangTidy()::ActionFactory::runInvocation()
>     @     0x5605d45cecca clang::tooling::ToolInvocation::runInvocation()
>     @     0x5605d45ce646 clang::tooling::ToolInvocation::run()
>     @     0x5605d45d0f22 clang::tooling::ClangTool::run()
>     @     0x5605d3d39c5f  clang::tidy::runClangTidy()
>     @     0x5605d0860c45  main
>
> #2 is still being reduced.
>
>
> On Wed, Mar 20, 2019 at 2:37 AM Artem Dergachev <noqnoqneo at gmail.com 
> <mailto:noqnoqneo at gmail.com>> wrote:
>
>     On 3/19/19 11:10 AM, Richard Smith wrote:
>     > It sounds like there might be a missing check for
>     > InitListExpr::isTransparent somewhere. (A transparent InitListExpr
>     > should be treated as equivalent to its one and only subexpression.)
>     > Either that, or the static analyzer isn't aware that an object of
>     > class type can be initialized directly from a function call, not
>     via a
>     > constructor.
>
>     Indeed, thanks! And, as usual, more bugs on top of that.
>     (https://reviews.llvm.org/D59573)
>
>     On 3/19/19 11:00 AM, Alexander Kornienko wrote:
>     > just adding -std=c++17 on existing code (LLVM, for example ;) could
>     > help uncover some of the issues
>
>     Hmm, fair enough :D I'm glad i asked :)
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190321/0000166d/attachment.html>


More information about the cfe-commits mailing list