yronglin wrote: > Forgot that the revert wouldn't include the `lifetimebound` attribute. I > restructured the switch case like that, in order to catch both: > > ``` > case LK_Extended: { > if (!MTE) { > // The initialized entity has lifetime beyond the full-expression, > // and the local entity does too, so don't warn. > // > // FIXME: We should consider warning if a static / thread storage > // duration variable retains an automatic storage duration local. > return false; > } > > switch (shouldLifetimeExtendThroughPath(Path)) { > case PathLifetimeKind::Extend: > assert(!IsGslPtrValueFromGslTempOwner); // Just a test, to be sure > that we aren't losing something here. > // can be removed safely I > guess. > > // Update the storage duration of the materialized temporary. > // FIXME: Rebuild the expression instead of mutating it. > MTE->setExtendingDecl(ExtendingEntity->getDecl(), > ExtendingEntity->allocateManglingNumber()); > // Also visit the temporaries lifetime-extended by this initializer. > return true; > > case PathLifetimeKind::NoExtend: > if (SemaRef.getLangOpts().CPlusPlus23 && InitEntity) { > if (const VarDecl *VD = > dyn_cast_if_present<VarDecl>(InitEntity->getDecl()); > VD && VD->isCXXForRangeImplicitVar()) > return false; > } > > > if (IsGslPtrValueFromGslTempOwner && DiagLoc.isValid()) { > SemaRef.Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) > << DiagRange; > return false; > } > > // If the path goes through the initialization of a variable or field, > // it can't possibly reach a temporary created in this > full-expression. > // We will have already diagnosed any problems with the initializer. > if (pathContainsInit(Path)) > return false; > > SemaRef.Diag(DiagLoc, diag::warn_dangling_variable) > << RK << !InitEntity->getParent() > << ExtendingEntity->getDecl()->isImplicit() > << ExtendingEntity->getDecl() << Init->isGLValue() << DiagRange; > break; > } > break; > } > ```
Could you push the changes to this PR? https://github.com/llvm/llvm-project/pull/145164 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits