Anna Zaks | bfa9ab8 | 2013-01-24 23:15:30 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify -w %s |
Jordan Rose | 73212df | 2012-08-29 01:11:59 +0000 | [diff] [blame] | 2 | |
| 3 | struct Trivial { |
| 4 | Trivial(int x) : value(x) {} |
| 5 | int value; |
| 6 | }; |
| 7 | |
| 8 | struct NonTrivial : public Trivial { |
| 9 | NonTrivial(int x) : Trivial(x) {} |
| 10 | ~NonTrivial(); |
| 11 | }; |
| 12 | |
| 13 | |
| 14 | Trivial getTrivial() { |
| 15 | return Trivial(42); // no-warning |
| 16 | } |
| 17 | |
| 18 | const Trivial &getTrivialRef() { |
Jordan Rose | bc40386 | 2013-02-15 00:32:15 +0000 | [diff] [blame^] | 19 | return Trivial(42); // expected-warning {{Address of stack memory associated with temporary object of type 'const struct Trivial' returned to caller}} |
Jordan Rose | 73212df | 2012-08-29 01:11:59 +0000 | [diff] [blame] | 20 | } |
| 21 | |
| 22 | |
| 23 | NonTrivial getNonTrivial() { |
| 24 | return NonTrivial(42); // no-warning |
| 25 | } |
| 26 | |
| 27 | const NonTrivial &getNonTrivialRef() { |
Jordan Rose | bc40386 | 2013-02-15 00:32:15 +0000 | [diff] [blame^] | 28 | return NonTrivial(42); // expected-warning {{Address of stack memory associated with temporary object of type 'const struct NonTrivial' returned to caller}} |
Jordan Rose | 73212df | 2012-08-29 01:11:59 +0000 | [diff] [blame] | 29 | } |
| 30 | |