https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109991
Bug ID: 109991 Summary: stack-use-after-scope Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: igkper at gmail dot com CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at gcc dot gnu.org Target Milestone: --- Hi, I believe the below code should result in sanitizer complaining about stack-use-after-scope, but it does not. I've noted that clang catches this but not gcc. I've annotated where I've noted it seems to depend on whether or not constexpr is used. See https://godbolt.org/z/Y3YKcfGda. using T = int; struct Wrap { T const& v; // Shouldn't extend lifetime of temporary constexpr Wrap(T const& in) : v{in} {} }; struct BadWrapUse final { T i{}; constexpr BadWrapUse() // issue not caught with constexpr // BadWrapUse() // issue caught without constexpr { 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; }