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 };
29