907 lines
20 KiB
C++
907 lines
20 KiB
C++
|
// RUN: %check_clang_tidy %s bugprone-standalone-empty %t
|
||
|
|
||
|
namespace std {
|
||
|
template <typename T>
|
||
|
struct vector {
|
||
|
bool empty();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_clear {
|
||
|
bool empty();
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_void_empty {
|
||
|
void empty();
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_int_empty {
|
||
|
int empty();
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_clear_args {
|
||
|
bool empty();
|
||
|
void clear(int i);
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_clear_variable {
|
||
|
bool empty();
|
||
|
int clear;
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
bool empty(T &&);
|
||
|
|
||
|
} // namespace std
|
||
|
|
||
|
namespace absl {
|
||
|
struct string {
|
||
|
bool empty();
|
||
|
};
|
||
|
|
||
|
struct string_with_clear {
|
||
|
bool empty();
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
struct string_with_void_empty {
|
||
|
void empty();
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
struct string_with_int_empty {
|
||
|
int empty();
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
struct string_with_clear_args {
|
||
|
bool empty();
|
||
|
void clear(int i);
|
||
|
};
|
||
|
|
||
|
struct string_with_clear_variable {
|
||
|
bool empty();
|
||
|
int clear;
|
||
|
};
|
||
|
|
||
|
template <class T>
|
||
|
bool empty(T &&);
|
||
|
} // namespace absl
|
||
|
|
||
|
namespace test {
|
||
|
template <class T>
|
||
|
void empty(T &&);
|
||
|
} // namespace test
|
||
|
|
||
|
namespace test_no_args {
|
||
|
bool empty();
|
||
|
} // namespace test_no_args
|
||
|
|
||
|
namespace base {
|
||
|
template <typename T>
|
||
|
struct base_vector {
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct base_vector_clear_with_args {
|
||
|
void clear(int i);
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct base_vector_clear_variable {
|
||
|
int clear;
|
||
|
};
|
||
|
|
||
|
struct base_vector_non_dependent {
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector : base_vector<T> {
|
||
|
bool empty();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_clear_with_args : base_vector_clear_with_args<T> {
|
||
|
bool empty();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_clear_variable : base_vector_clear_variable<T> {
|
||
|
bool empty();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_non_dependent : base_vector_non_dependent {
|
||
|
bool empty();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
bool empty(T &&);
|
||
|
|
||
|
} // namespace base
|
||
|
|
||
|
namespace qualifiers {
|
||
|
template <typename T>
|
||
|
struct vector_with_const_clear {
|
||
|
bool empty() const;
|
||
|
void clear() const;
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_const_empty {
|
||
|
bool empty() const;
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_volatile_clear {
|
||
|
bool empty() volatile;
|
||
|
void clear() volatile;
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
struct vector_with_volatile_empty {
|
||
|
bool empty() volatile;
|
||
|
void clear();
|
||
|
};
|
||
|
|
||
|
template <typename T>
|
||
|
bool empty(T &&);
|
||
|
} // namespace qualifiers
|
||
|
|
||
|
|
||
|
bool test_member_empty() {
|
||
|
{
|
||
|
std::vector<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_void_empty<int> v;
|
||
|
v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_int_empty<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_args<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_variable<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
s.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_void_empty s;
|
||
|
s.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear s;
|
||
|
s.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} s.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_int_empty s;
|
||
|
s.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} s.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_args s;
|
||
|
s.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_variable s;
|
||
|
s.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_int_empty<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_args<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_variable<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
return s.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear s;
|
||
|
return s.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_int_empty s;
|
||
|
return s.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_args s;
|
||
|
return s.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_variable s;
|
||
|
return s.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool test_qualified_empty() {
|
||
|
{
|
||
|
absl::string_with_clear v;
|
||
|
std::empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
|
||
|
absl::empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
|
||
|
test::empty(v);
|
||
|
// no-warning
|
||
|
|
||
|
test_no_args::empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
std::empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::empty(0);
|
||
|
// no-warning
|
||
|
absl::empty(nullptr);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear s;
|
||
|
return std::empty(s);
|
||
|
// no-warning
|
||
|
return absl::empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
return std::empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
return std::empty(0);
|
||
|
// no-warning
|
||
|
return absl::empty(nullptr);
|
||
|
// no-warning
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool test_unqualified_empty() {
|
||
|
{
|
||
|
std::vector<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_void_empty<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_int_empty<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_args<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_variable<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_void_empty s;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} s.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear s;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} s.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_int_empty s;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} s.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_args s;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_variable s;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector<int> v;
|
||
|
using std::empty;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear<int> v;
|
||
|
using std::empty;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
using absl::empty;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear s;
|
||
|
using absl::empty;
|
||
|
empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'absl::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} s.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_void_empty<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_int_empty<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_args<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear_variable<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_void_empty s;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear s;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_int_empty s;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_args s;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear_variable s;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector<int> v;
|
||
|
using std::empty;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
std::vector_with_clear<int> v;
|
||
|
using std::empty;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string s;
|
||
|
using absl::empty;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
absl::string_with_clear s;
|
||
|
using absl::empty;
|
||
|
return empty(s);
|
||
|
// no-warning
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void test_empty_method_expressions() {
|
||
|
std::vector<int> v;
|
||
|
bool EmptyReturn(v.empty());
|
||
|
// no-warning
|
||
|
|
||
|
(void)v.empty();
|
||
|
// no-warning
|
||
|
|
||
|
// Don't warn in the if condition.
|
||
|
if (v.empty()) v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:18: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
|
||
|
// Don't warn in the for condition.
|
||
|
for(v.empty();v.empty();v.empty()) v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:7: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
// CHECK-MESSAGES: :[[#@LINE-2]]:27: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
// CHECK-MESSAGES: :[[#@LINE-3]]:38: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
|
||
|
// Don't warn in the while condition.
|
||
|
while(v.empty()) v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:20: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
|
||
|
// Don't warn in the do-while condition.
|
||
|
do v.empty(); while(v.empty());
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:6: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
|
||
|
// Don't warn in the switch expression.
|
||
|
switch(v.empty()) {
|
||
|
// no-warning
|
||
|
case true:
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:7: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
// Don't warn in the return expression, which is the last statement.
|
||
|
bool StmtExprReturn = ({v.empty(); v.empty();});
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:27: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
void test_empty_expressions() {
|
||
|
absl::string s;
|
||
|
bool test(std::empty(s));
|
||
|
// no-warning
|
||
|
|
||
|
(void)std::empty(s);
|
||
|
// no-warning
|
||
|
|
||
|
if (std::empty(s)) std::empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:22: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
|
||
|
for(std::empty(s);std::empty(s);std::empty(s)) std::empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:7: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
// CHECK-MESSAGES: :[[#@LINE-2]]:35: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
// CHECK-MESSAGES: :[[#@LINE-3]]:50: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
|
||
|
while(std::empty(s)) std::empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:24: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
|
||
|
do std::empty(s); while(std::empty(s));
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:6: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
|
||
|
switch(std::empty(s)) {
|
||
|
// no-warning
|
||
|
case true:
|
||
|
std::empty(s);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:7: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
bool StmtExprReturn = ({std::empty(s); std::empty(s);});
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:27: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
bool test_clear_in_base_class() {
|
||
|
{
|
||
|
base::vector<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_non_dependent<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_with_args<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_variable<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'base::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_non_dependent<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'base::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_with_args<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'base::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_variable<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'base::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_non_dependent<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_with_args<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_variable<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_non_dependent<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_with_args<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
base::vector_clear_variable<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool test_clear_with_qualifiers() {
|
||
|
{
|
||
|
qualifiers::vector_with_const_clear<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const qualifiers::vector_with_const_clear<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const qualifiers::vector_with_const_empty<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
qualifiers::vector_with_const_clear<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'qualifiers::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const qualifiers::vector_with_const_clear<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'qualifiers::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const std::vector_with_clear<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
qualifiers::vector_with_volatile_clear<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile qualifiers::vector_with_volatile_clear<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile qualifiers::vector_with_volatile_empty<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
qualifiers::vector_with_volatile_clear<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'qualifiers::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile qualifiers::vector_with_volatile_clear<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'qualifiers::empty'; did you mean 'clear()'? [bugprone-standalone-empty]
|
||
|
// CHECK-FIXES: {{^ }} v.clear();{{$}}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile std::vector_with_clear<int> v;
|
||
|
empty(v);
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:5: warning: ignoring the result of 'std::empty' [bugprone-standalone-empty]
|
||
|
}
|
||
|
|
||
|
{
|
||
|
qualifiers::vector_with_const_clear<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const qualifiers::vector_with_const_clear<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const qualifiers::vector_with_const_empty<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
qualifiers::vector_with_const_clear<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const qualifiers::vector_with_const_clear<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const std::vector_with_clear<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
qualifiers::vector_with_volatile_clear<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile qualifiers::vector_with_volatile_clear<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile qualifiers::vector_with_volatile_empty<int> v;
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
qualifiers::vector_with_volatile_clear<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile qualifiers::vector_with_volatile_clear<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
|
||
|
{
|
||
|
volatile std::vector_with_clear<int> v;
|
||
|
return empty(v);
|
||
|
// no-warning
|
||
|
}
|
||
|
}
|
||
|
|
||
|
namespace user_lib {
|
||
|
template <typename T>
|
||
|
struct vector {
|
||
|
bool empty();
|
||
|
bool test_empty_inside_impl() {
|
||
|
empty();
|
||
|
// no-warning
|
||
|
return empty();
|
||
|
// no-warning
|
||
|
}
|
||
|
};
|
||
|
} // namespace user_lib
|
||
|
|
||
|
bool test_template_empty_outside_impl() {
|
||
|
user_lib::vector<int> v;
|
||
|
v.empty();
|
||
|
// CHECK-MESSAGES: :[[#@LINE-1]]:3: warning: ignoring the result of 'empty()' [bugprone-standalone-empty]
|
||
|
return v.empty();
|
||
|
// no-warning
|
||
|
}
|