Alexander Shaposhnikov | e2f0734 | 2018-10-30 01:20:37 +0000 | [diff] [blame] | 1 | // RUN: %clang_analyze_cc1 -std=c++14 -analyzer-checker=optin.performance -analyzer-config optin.performance.Padding:AllowedPad=20 -verify %s |
| 2 | |
| 3 | // A class that has no fields and one base class should visit that base class |
| 4 | // instead. Note that despite having excess padding of 2, this is flagged |
| 5 | // because of its usage in an array of 100 elements below (`ais'). |
| 6 | // TODO: Add a note to the bug report with BugReport::addNote() to mention the |
| 7 | // variable using the class and also mention what class is inherting from what. |
| 8 | // expected-warning@+1{{Excessive padding in 'struct FakeIntSandwich'}} |
| 9 | struct FakeIntSandwich { |
| 10 | char c1; |
| 11 | int i; |
| 12 | char c2; |
| 13 | }; |
| 14 | |
| 15 | struct AnotherIntSandwich : FakeIntSandwich { // no-warning |
| 16 | }; |
| 17 | |
| 18 | // But we don't yet support multiple base classes. |
| 19 | struct IntSandwich {}; |
| 20 | struct TooManyBaseClasses : FakeIntSandwich, IntSandwich { // no-warning |
| 21 | }; |
| 22 | |
| 23 | AnotherIntSandwich ais[100]; |
| 24 | |
| 25 | struct Empty {}; |
| 26 | struct DoubleEmpty : Empty { // no-warning |
| 27 | Empty e; |
| 28 | }; |