https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109991

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
             Status|UNCONFIRMED                 |NEW
          Component|sanitizer                   |c++
   Last reconfirmed|                            |2023-05-26
     Ever confirmed|0                           |1
             Blocks|                            |55004

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
That is because with constexpr, the code should have been rejected ...

Take this C++20 GCC accepts it (incorrectly) but clang rejects it:
```
using T = int;
struct Wrap
{
    T const& v;
    constexpr Wrap(T const& in) : v{in} {}
};

struct BadWrapUse final
{
    T i{};
    consteval BadWrapUse()
    {
        Wrap w{T{}};  // temporary T's lifetime ends after this expression
        i = w.v;      // This should lead to stack-use-after-scope.
    }
};

int main()
{
    BadWrapUse c;
}
```

Note there might be a dup of it somewhere.
Basically in your original example, GCC is doing constexpr evulation but that
is not valid for constant expression evulation ...


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55004
[Bug 55004] [meta-bug] constexpr issues

Reply via email to