// RUN: %clang_cc1 -fsyntax-only -verify %s // PR4103 : Make sure we don't get a bogus unused expression warning namespace PR4103 { class APInt { char foo; }; class APSInt : public APInt { char bar; public: APSInt &operator=(const APSInt &RHS); }; APSInt& APSInt::operator=(const APSInt &RHS) { APInt::operator=(RHS); return *this; } template struct X { X(); }; void test() { X(); } } namespace derefvolatile { void f(volatile char* x) { *x; // expected-warning {{expression result unused; assign into a variable to force a volatile load}} (void)*x; // expected-warning {{expression result unused; assign into a variable to force a volatile load}} volatile char y = 10; (void)y; // don't warn here, because it's a common pattern. } } // namespace AnonObject { struct Foo { Foo(const char* const message); ~Foo(); }; void f() { Foo("Hello World!"); // don't warn int(1); // expected-warning {{expression result unused}} } } // Test that constructing an object (which may have side effects) with // constructor arguments which are dependent doesn't produce an unused value // warning. namespace UnresolvedLookup { struct Foo { Foo(int i, int j); }; template struct Bar { void f(T t) { Foo(t, 0); // no warning } }; }