diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-08-07 21:30:42 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-08-07 21:30:42 +0000 |
commit | 0b8220ae342f71fb50e763668f92d038eb54fb3f (patch) | |
tree | 4faf57dc1599ef25d1c6ceecc200ec5c269f4cdb /test/SemaCXX/warn-unused-private-field.cpp | |
parent | c343dd87a1b0784ee15ffd7634d0872bdb724646 (diff) |
-Wunused-private-fields: Don't try to check unresolved initializer expressions
for side-effects. Instead, check for side-effects after performing
initialization. Doing so also removes some strange corner cases and differences
between in-class initialization and constructor initialization.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161449 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/warn-unused-private-field.cpp')
-rw-r--r-- | test/SemaCXX/warn-unused-private-field.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/test/SemaCXX/warn-unused-private-field.cpp b/test/SemaCXX/warn-unused-private-field.cpp index 640a9b9a69..661442db9e 100644 --- a/test/SemaCXX/warn-unused-private-field.cpp +++ b/test/SemaCXX/warn-unused-private-field.cpp @@ -107,7 +107,7 @@ class A { int used_, unused_; // expected-warning{{private field 'unused_' is not used}} int in_class_initializer_ = 42; // expected-warning{{private field 'in_class_initializer_' is not used}} int in_class_initializer_with_side_effect_ = side_effect(); - Trivial trivial_initializer_ = Trivial(); + Trivial trivial_initializer_ = Trivial(); // expected-warning{{private field 'trivial_initializer_' is not used}} Trivial non_trivial_initializer_ = Trivial(42); int initialized_with_side_effect_; static int static_fields_are_ignored_; @@ -219,3 +219,28 @@ class A { void* p2_; // expected-warning{{private field 'p2_' is not used}} }; } + +namespace pr13543 { + void f(int); + void f(char); + struct S { + S() : p(&f) {} + private: + void (*p)(int); // expected-warning{{private field 'p' is not used}} + }; + + struct A { int n; }; + struct B { + B() : a(A()) {} + B(char) {} + B(int n) : a{n}, b{(f(n), 0)} {} + private: + A a = A(); // expected-warning{{private field 'a' is not used}} + A b; + }; + + struct X { ~X(); }; + class C { + X x[4]; // no-warning + }; +} |