1122171e2SReka Kovacs // RUN: %clang_analyze_cc1 -analyzer-checker=cplusplus.NewDelete -verify %s 2122171e2SReka Kovacs 3122171e2SReka Kovacs #include "Inputs/system-header-simulator-cxx.h" 4122171e2SReka Kovacs 5122171e2SReka Kovacs struct S { SS6122171e2SReka Kovacs S() : Data(new int) {} ~SS7122171e2SReka Kovacs ~S() { delete Data; } getDataS8122171e2SReka Kovacs int *getData() { return Data; } 9122171e2SReka Kovacs 10122171e2SReka Kovacs private: 11122171e2SReka Kovacs int *Data; 12122171e2SReka Kovacs }; 13122171e2SReka Kovacs freeAfterReturnTemp()14122171e2SReka Kovacsint *freeAfterReturnTemp() { 15122171e2SReka Kovacs return S().getData(); // expected-warning {{Use of memory after it is freed}} 16122171e2SReka Kovacs } 17122171e2SReka Kovacs freeAfterReturnLocal()18122171e2SReka Kovacsint *freeAfterReturnLocal() { 19122171e2SReka Kovacs S X; 20*33e5a158SGeorge Karpenkov return X.getData(); // expected-warning {{Use of memory after it is freed}} 21*33e5a158SGeorge Karpenkov } 22