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

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 21 06:58:50 PDT 2019


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> 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/84b6de3d/attachment-0001.html>


More information about the cfe-commits mailing list