temporaries.cpp revision 5500fc193af4b786bbbbee6ece743f523448e90b
1// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify -w %s
2
3struct Trivial {
4  Trivial(int x) : value(x) {}
5  int value;
6};
7
8struct NonTrivial : public Trivial {
9  NonTrivial(int x) : Trivial(x) {}
10  ~NonTrivial();
11};
12
13
14Trivial getTrivial() {
15  return Trivial(42); // no-warning
16}
17
18const Trivial &getTrivialRef() {
19  return Trivial(42); // expected-warning {{Address of stack memory associated with temporary object of type 'const struct Trivial' returned to caller}}
20}
21
22
23NonTrivial getNonTrivial() {
24  return NonTrivial(42); // no-warning
25}
26
27const NonTrivial &getNonTrivialRef() {
28  return NonTrivial(42); // expected-warning {{Address of stack memory associated with temporary object of type 'const struct NonTrivial' returned to caller}}
29}
30
31