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

Reply via email to