1ef8f90caa14d85cffba2fea4b6bd425c3b22eea7Richard Trieu// RUN: %clang_cc1 -fsyntax-only -Wunused-private-field -Wused-but-marked-unused -Wno-uninitialized -verify -std=c++11 %s
2f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
3f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass NotFullyDefined {
4f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper public:
5f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  NotFullyDefined();
6f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper private:
7f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int y;
8f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
9f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
10f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass HasUndefinedNestedClass {
11f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  class Undefined;
12f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int unused_;
13f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
14f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
15f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass HasUndefinedPureVirtualDestructor {
16f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  virtual ~HasUndefinedPureVirtualDestructor() = 0;
17f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int unused_;
18f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
19f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
20f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass HasDefinedNestedClasses {
21f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  class DefinedHere {};
22f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  class DefinedOutside;
23f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int unused_; // expected-warning{{private field 'unused_' is not used}}
24f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
25f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass HasDefinedNestedClasses::DefinedOutside {};
26f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
27f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass HasUndefinedFriendFunction {
28f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend void undefinedFriendFunction();
29f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int unused_;
30f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
31f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
32f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass HasUndefinedFriendClass {
33f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class NotFullyDefined;
34f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class NotDefined;
35f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int unused_;
36f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
37f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
38f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass HasFriend {
39f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class FriendClass;
40f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend void friendFunction(HasFriend f);
41f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int unused_; // expected-warning{{private field 'unused_' is not used}}
42f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int used_by_friend_class_;
43f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int used_by_friend_function_;
44f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
45f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
46f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass ClassWithTemplateFriend {
47f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  template <typename T> friend class TemplateFriend;
48f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int used_by_friend_;
49f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int unused_;
50f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
51f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
52f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jaspertemplate <typename T> class TemplateFriend {
53f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperpublic:
54f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  TemplateFriend(ClassWithTemplateFriend my_friend) {
55f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    int var = my_friend.used_by_friend_;
56f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  }
57f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
58f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
59f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass FriendClass {
60f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  HasFriend my_friend_;
61f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  void use() {
62f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    my_friend_.used_by_friend_class_ = 42;
63f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  }
64f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
65f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
66f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jaspervoid friendFunction(HasFriend my_friend) {
67f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  my_friend.used_by_friend_function_ = 42;
68f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper}
69f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
70f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass NonTrivialConstructor {
71f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper public:
72f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  NonTrivialConstructor() {}
73f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
74f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
75f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass NonTrivialDestructor {
76f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper public:
77f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  ~NonTrivialDestructor() {}
78f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
79f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
80f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass Trivial {
81f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper public:
82f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  Trivial() = default;
83f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  Trivial(int a) {}
84f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
85f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
86f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperint side_effect() {
87f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  return 42;
88f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper}
89f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
90f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass A {
91f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper public:
92f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  A() : primitive_type_(42), default_initializer_(), other_initializer_(42),
93f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper        trivial_(), user_constructor_(42),
94f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper        initialized_with_side_effect_(side_effect()) {
95f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    used_ = 42;
965c62ef52ac555bc2e2c9a3d26b2aa9b0598451f7Daniel Jasper    attr_used_ = 42; // expected-warning{{'attr_used_' was marked unused but was used}}
97f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  }
98f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
99f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  A(int x, A* a) : pointer_(a) {}
100f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
101f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper private:
102f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int primitive_type_; // expected-warning{{private field 'primitive_type_' is not used}}
103f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  A* pointer_; // expected-warning{{private field 'pointer_' is not used}}
104f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int no_initializer_; // expected-warning{{private field 'no_initializer_' is not used}}
105f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int default_initializer_; // expected-warning{{private field 'default_initializer_' is not used}}
106f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int other_initializer_; // expected-warning{{private field 'other_initializer_' is not used}}
107f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int used_, unused_; // expected-warning{{private field 'unused_' is not used}}
108f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int in_class_initializer_ = 42; // expected-warning{{private field 'in_class_initializer_' is not used}}
109f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int in_class_initializer_with_side_effect_ = side_effect();
1100b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  Trivial trivial_initializer_ = Trivial(); // expected-warning{{private field 'trivial_initializer_' is not used}}
111f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  Trivial non_trivial_initializer_ = Trivial(42);
112f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int initialized_with_side_effect_;
113f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  static int static_fields_are_ignored_;
114f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
115f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  Trivial trivial_; // expected-warning{{private field 'trivial_' is not used}}
116f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  Trivial user_constructor_;
117f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  NonTrivialConstructor non_trivial_constructor_;
118f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  NonTrivialDestructor non_trivial_destructor_;
119568eae48a4e19c0359cdcd2a33b8ec9812e4abbcDaniel Jasper
1205c62ef52ac555bc2e2c9a3d26b2aa9b0598451f7Daniel Jasper  int attr_ __attribute__((unused));
1215c62ef52ac555bc2e2c9a3d26b2aa9b0598451f7Daniel Jasper  int attr_used_ __attribute__((unused));
122f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
123f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
124f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass EverythingUsed {
125f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper public:
126f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  EverythingUsed() : as_array_index_(0), var_(by_initializer_) {
127f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    var_ = sizeof(sizeof_);
128f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    int *use = &by_reference_;
129f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    int test[2];
130f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    test[as_array_index_] = 42;
131f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  }
132f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
133f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  template<class T>
134f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  void useStuff(T t) {
135f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    by_template_function_ = 42;
136f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  }
137f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
138f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper private:
139f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int var_;
140f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int sizeof_;
141f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int by_reference_;
142f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int by_template_function_;
143f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int as_array_index_;
144f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int by_initializer_;
145f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
146f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
1472dc509d89379c7921ef0dd95d88cd1fc8b0526d1Daniel Jasperclass HasFeatureTest {
1482dc509d89379c7921ef0dd95d88cd1fc8b0526d1Daniel Jasper#if __has_feature(attribute_unused_on_fields)
1492dc509d89379c7921ef0dd95d88cd1fc8b0526d1Daniel Jasper  int unused_; // expected-warning{{private field 'unused_' is not used}}
1502dc509d89379c7921ef0dd95d88cd1fc8b0526d1Daniel Jasper  int unused2_ __attribute__((unused)); // no-warning
1512dc509d89379c7921ef0dd95d88cd1fc8b0526d1Daniel Jasper#endif
1522dc509d89379c7921ef0dd95d88cd1fc8b0526d1Daniel Jasper};
1532dc509d89379c7921ef0dd95d88cd1fc8b0526d1Daniel Jasper
1540e9e9f8d17e38b3c44f6e1323be3a812a793bdd1Daniel Jaspernamespace templates {
1550e9e9f8d17e38b3c44f6e1323be3a812a793bdd1Daniel Jasperclass B {
1560e9e9f8d17e38b3c44f6e1323be3a812a793bdd1Daniel Jasper  template <typename T> void f(T t);
1570e9e9f8d17e38b3c44f6e1323be3a812a793bdd1Daniel Jasper  int a;
1580e9e9f8d17e38b3c44f6e1323be3a812a793bdd1Daniel Jasper};
1590e9e9f8d17e38b3c44f6e1323be3a812a793bdd1Daniel Jasper}  // namespace templates
1600e9e9f8d17e38b3c44f6e1323be3a812a793bdd1Daniel Jasper
161f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jaspernamespace mutual_friends {
162f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper// Undefined methods make mutual friends undefined.
163f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass A {
164f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int a;
165f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class B;
166f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  void doSomethingToAOrB();
167f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
168f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass B {
169f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int b;
170f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class A;
171f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
172f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
173f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper// Undefined friends do not make a mutual friend undefined.
174f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass C {
175f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int c;
176f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  void doSomethingElse() {}
177f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class E;
178f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class D;
179f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
180f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass D {
181f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int d; // expected-warning{{private field 'd' is not used}}
182f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class C;
183f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
184f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
185f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper// Undefined nested classes make mutual friends undefined.
186f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass F {
187f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int f;
188f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  class G;
189f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class H;
190f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
191f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass H {
192f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int h;
193f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  friend class F;
194f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
195f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper}  // namespace mutual_friends
196f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper
197f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jaspernamespace anonymous_structs_unions {
198f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperclass A {
199f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper private:
200f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  // FIXME: Look at the DeclContext for anonymous structs/unions.
201f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  union {
202f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    int *Aligner;
203f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper    unsigned char Data[8];
204f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  };
205f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
206f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasperunion S {
207f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper private:
208f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  int *Aligner;
209f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper  unsigned char Data[8];
210f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper};
211f8cc02e50553b5c3bc6570bff0c47ac7db85fe8dDaniel Jasper}  // namespace anonymous_structs_unions
212381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber
213381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Webernamespace pr13413 {
214381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weberclass A {
215381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber  A() : p_(__null), b_(false), a_(this), p2_(nullptr) {}
216381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber  void* p_;  // expected-warning{{private field 'p_' is not used}}
217381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber  bool b_;  // expected-warning{{private field 'b_' is not used}}
218381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber  A* a_;  // expected-warning{{private field 'a_' is not used}}
219381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber  void* p2_;  // expected-warning{{private field 'p2_' is not used}}
220381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber};
221381767fcfe2fdf53727099d95b23b0c9e6a9aa6cNico Weber}
2220b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith
2230b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smithnamespace pr13543 {
2240b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  void f(int);
2250b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  void f(char);
2260b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  struct S {
2270b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    S() : p(&f) {}
2280b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  private:
2290b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    void (*p)(int); // expected-warning{{private field 'p' is not used}}
2300b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  };
2310b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith
2320b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  struct A { int n; };
2330b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  struct B {
2340b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    B() : a(A()) {}
2350b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    B(char) {}
2360b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    B(int n) : a{n}, b{(f(n), 0)} {}
2370b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  private:
2380b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    A a = A(); // expected-warning{{private field 'a' is not used}}
2390b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    A b;
2400b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  };
2410b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith
2420b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  struct X { ~X(); };
2430b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  class C {
2440b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith    X x[4]; // no-warning
2450b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith  };
2460b8220ae342f71fb50e763668f92d038eb54fb3fRichard Smith}
247