forked from OSchip/llvm-project
101 lines
2.5 KiB
C++
101 lines
2.5 KiB
C++
// RUN: %check_clang_tidy %s bugprone-unused-return-value %t \
|
|
// RUN: -config='{CheckOptions: \
|
|
// RUN: [{key: bugprone-unused-return-value.CheckedFunctions, \
|
|
// RUN: value: "::fun;::ns::Outer::Inner::memFun;::ns::Type::staticFun;::ns::ClassTemplate::memFun;::ns::ClassTemplate::staticFun"}]}' \
|
|
// RUN: --
|
|
|
|
namespace std {
|
|
|
|
template <typename T>
|
|
T *launder(T *);
|
|
|
|
} // namespace std
|
|
|
|
namespace ns {
|
|
|
|
struct Outer {
|
|
struct Inner {
|
|
bool memFun();
|
|
};
|
|
};
|
|
|
|
using AliasName = Outer;
|
|
|
|
struct Derived : public Outer::Inner {};
|
|
|
|
struct Retval {
|
|
int *P;
|
|
Retval() { P = new int; }
|
|
~Retval() { delete P; }
|
|
};
|
|
|
|
struct Type {
|
|
Retval memFun();
|
|
static Retval staticFun();
|
|
};
|
|
|
|
template <typename T>
|
|
struct ClassTemplate {
|
|
Retval memFun();
|
|
static Retval staticFun();
|
|
};
|
|
|
|
} // namespace ns
|
|
|
|
int fun();
|
|
void fun(int);
|
|
|
|
void warning() {
|
|
fun();
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
|
|
(fun());
|
|
// CHECK-MESSAGES: [[@LINE-1]]:4: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
|
|
ns::Outer::Inner ObjA1;
|
|
ObjA1.memFun();
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
|
|
ns::AliasName::Inner ObjA2;
|
|
ObjA2.memFun();
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
|
|
ns::Derived ObjA3;
|
|
ObjA3.memFun();
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
|
|
ns::Type::staticFun();
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
|
|
ns::ClassTemplate<int> ObjA4;
|
|
ObjA4.memFun();
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
|
|
ns::ClassTemplate<int>::staticFun();
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: the value returned by this function should be used [bugprone-unused-return-value]
|
|
}
|
|
|
|
void noWarning() {
|
|
auto R1 = fun();
|
|
|
|
ns::Outer::Inner ObjB1;
|
|
auto R2 = ObjB1.memFun();
|
|
|
|
auto R3 = ns::Type::staticFun();
|
|
|
|
ns::ClassTemplate<int> ObjB2;
|
|
auto R4 = ObjB2.memFun();
|
|
|
|
auto R5 = ns::ClassTemplate<int>::staticFun();
|
|
|
|
// test calling a void overload of a checked function
|
|
fun(5);
|
|
|
|
// test discarding return value of functions that are not configured to be checked
|
|
int I = 1;
|
|
std::launder(&I);
|
|
|
|
ns::Type ObjB3;
|
|
ObjB3.memFun();
|
|
}
|