15c62ef52ac555bc2e2c9a3d26b2aa9b0598451f7Daniel Jasper// RUN: %clang_cc1 -fsyntax-only -Wunused-private-field -Wused-but-marked-unused -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