// RUN: %clang_analyze_cc1 %s -verify -analyzer-checker=core #include "Inputs/system-header-simulator-cxx.h" namespace GH94193 { template class optional { union { char x; T uvalue; }; bool holds_value = false; public: optional() = default; optional(const optional&) = delete; optional(optional&&) = delete; template explicit optional(U&& value) : holds_value(true) { new (static_cast(std::addressof(uvalue))) T(std::forward(value)); } optional& operator=(const optional&) = delete; optional& operator=(optional&&) = delete; explicit operator bool() const { return holds_value; } T& unwrap() & { return uvalue; // no-warning: returns a valid value } }; int top1(int x) { optional opt{x}; // note: Ctor was inlined. return opt.unwrap(); // no-warning: returns a valid value } std::string *top2() { std::string a = "123"; // expected-warning@+2 {{address of stack memory associated with local variable 'a' returned}} diagnosed by -Wreturn-stack-address // expected-warning@+1 {{Address of stack memory associated with local variable 'a' returned to caller [core.StackAddressEscape]}} return std::addressof(a); } } // namespace GH94193