baloghadamsoftware added a comment.

In D77229#2005033 <https://reviews.llvm.org/D77229#2005033>, @NoQ wrote:

> > How do we calculate the type then?
>
> Argument expression type + account for value kind (lvalue argument expression 
> means reference parameter, xvalue argument expression mean rvalue reference 
> parameter).


OK, I reid this piece of code instead of storing the type explicitly:

  QualType ParamRegion::getValueType() const {
    const Expr *Arg = nullptr;
    if (const auto *CE = dyn_cast<CallExpr>(OriginExpr)) {
      Arg = CE->getArg(Index);
    } else if (const auto *CCE = dyn_cast<CXXConstructExpr>(OriginExpr)) {
      Arg = CCE->getArg(Index);
    } else if (const auto *OCME = dyn_cast<ObjCMessageExpr>(OriginExpr)) {
      Arg = OCME->getArg(Index);
    } else if (const auto *CNE = dyn_cast<CXXNewExpr>(OriginExpr)) {
      Arg = CNE->getPlacementArg(Index);
    } else {
      // FIXME: Any other kind of `Expr`?
      llvm_unreachable("Maybe we forgot something...");
    }
  
    assert(Arg);
  
    switch (Arg->getValueKind()) {
    case VK_RValue:
      return Arg->getType();
    case VK_LValue:
      return getContext().getLValueReferenceType(Arg->getType());
    case VK_XValue:
      return getContext().getRValueReferenceType(Arg->getType());
    default:
      llvm_unreachable("Invalid value kind.");
    }
  }

This results in the following assertion:

  llvm-project/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp:333: 
clang::ento::ProgramStateRef 
clang::ento::ExprEngine::createTemporaryRegionIfNeeded(clang::ento::ProgramStateRef,
 const clang::LocationContext*, const clang::Expr*, const clang::Expr*, const 
clang::ento::SubRegion**): Assertion `!InitValWithAdjustments.getAs<Loc>() || 
Loc::isLocType(Result->getType()) || Result->getType()->isMemberPointerType()' 
failed.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77229/new/

https://reviews.llvm.org/D77229



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to