2015-10-22 19:31:44 +08:00
|
|
|
// RUN: %check_clang_tidy %s misc-unused-raii %t
|
2014-07-23 19:49:46 +08:00
|
|
|
|
|
|
|
struct Foo {
|
|
|
|
Foo();
|
|
|
|
Foo(int);
|
|
|
|
Foo(int, int);
|
|
|
|
~Foo();
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Bar {
|
|
|
|
Bar();
|
2015-05-12 20:17:20 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct FooBar {
|
|
|
|
FooBar();
|
2014-07-23 19:49:46 +08:00
|
|
|
Foo f;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
void qux() {
|
|
|
|
T(42);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
struct TFoo {
|
|
|
|
TFoo(T);
|
|
|
|
~TFoo();
|
|
|
|
};
|
|
|
|
|
|
|
|
Foo f();
|
|
|
|
|
|
|
|
struct Ctor {
|
|
|
|
Ctor(int);
|
|
|
|
Ctor() {
|
|
|
|
Ctor(0); // TODO: warn here.
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
void test() {
|
|
|
|
Foo(42);
|
|
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
|
|
|
|
// CHECK-FIXES: Foo give_me_a_name(42);
|
|
|
|
Foo(23, 42);
|
|
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
|
|
|
|
// CHECK-FIXES: Foo give_me_a_name(23, 42);
|
|
|
|
Foo();
|
|
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
|
|
|
|
// CHECK-FIXES: Foo give_me_a_name;
|
|
|
|
TFoo<int>(23);
|
|
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
|
|
|
|
// CHECK-FIXES: TFoo<int> give_me_a_name(23);
|
|
|
|
|
2015-05-12 20:17:20 +08:00
|
|
|
FooBar();
|
|
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: object destroyed immediately after creation; did you mean to name the object?
|
|
|
|
// CHECK-FIXES: FooBar give_me_a_name;
|
|
|
|
|
2014-07-23 19:49:46 +08:00
|
|
|
Bar();
|
|
|
|
f();
|
|
|
|
qux<Foo>();
|
|
|
|
|
|
|
|
#define M Foo();
|
|
|
|
M
|
|
|
|
|
|
|
|
{
|
|
|
|
Foo();
|
|
|
|
}
|
|
|
|
Foo();
|
|
|
|
}
|