forked from OSchip/llvm-project
parent
171244fb7a
commit
76e4315a0e
|
@ -18,40 +18,6 @@ namespace clang {
|
||||||
namespace tidy {
|
namespace tidy {
|
||||||
namespace misc {
|
namespace misc {
|
||||||
|
|
||||||
namespace {
|
|
||||||
// FIXME: it would be good to make a list that is also user-configurable so that
|
|
||||||
// users can add their own elements to the list. However, it may require some
|
|
||||||
// extra thought since POSIX types and FILE types are usable in different ways.
|
|
||||||
bool isPOSIXTypeName(StringRef ClassName) {
|
|
||||||
static const char *const TypeNames[] = {
|
|
||||||
"::pthread_cond_t",
|
|
||||||
"::pthread_mutex_t",
|
|
||||||
"pthread_cond_t",
|
|
||||||
"pthread_mutex_t"
|
|
||||||
};
|
|
||||||
return std::binary_search(std::begin(TypeNames), std::end(TypeNames),
|
|
||||||
ClassName);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isFILETypeName(StringRef ClassName) {
|
|
||||||
static const char *const TypeNames[] = {
|
|
||||||
"::FILE",
|
|
||||||
"FILE",
|
|
||||||
"std::FILE"
|
|
||||||
};
|
|
||||||
return std::binary_search(std::begin(TypeNames), std::end(TypeNames),
|
|
||||||
ClassName);
|
|
||||||
}
|
|
||||||
|
|
||||||
AST_MATCHER(NamedDecl, isFILEType) {
|
|
||||||
return isFILETypeName(Node.getQualifiedNameAsString());
|
|
||||||
}
|
|
||||||
|
|
||||||
AST_MATCHER(NamedDecl, isPOSIXType) {
|
|
||||||
return isPOSIXTypeName(Node.getQualifiedNameAsString());
|
|
||||||
}
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void NonCopyableObjectsCheck::registerMatchers(MatchFinder *Finder) {
|
void NonCopyableObjectsCheck::registerMatchers(MatchFinder *Finder) {
|
||||||
// There are two ways to get into trouble with objects like FILE *:
|
// There are two ways to get into trouble with objects like FILE *:
|
||||||
// dereferencing the pointer type to be a non-pointer type, and declaring
|
// dereferencing the pointer type to be a non-pointer type, and declaring
|
||||||
|
@ -63,8 +29,17 @@ void NonCopyableObjectsCheck::registerMatchers(MatchFinder *Finder) {
|
||||||
// non-pointer variable or data member of the type, but it is not reasonable
|
// non-pointer variable or data member of the type, but it is not reasonable
|
||||||
// to dereference a pointer to the type, or declare a parameter of non-pointer
|
// to dereference a pointer to the type, or declare a parameter of non-pointer
|
||||||
// type.
|
// type.
|
||||||
auto BadFILEType = hasType(namedDecl(isFILEType()).bind("type_decl"));
|
// FIXME: it would be good to make a list that is also user-configurable so
|
||||||
auto BadPOSIXType = hasType(namedDecl(isPOSIXType()).bind("type_decl"));
|
// that users can add their own elements to the list. However, it may require
|
||||||
|
// some extra thought since POSIX types and FILE types are usable in different
|
||||||
|
// ways.
|
||||||
|
|
||||||
|
auto BadFILEType = hasType(
|
||||||
|
namedDecl(hasAnyName("::FILE", "FILE", "std::FILE")).bind("type_decl"));
|
||||||
|
auto BadPOSIXType =
|
||||||
|
hasType(namedDecl(hasAnyName("::pthread_cond_t", "::pthread_mutex_t",
|
||||||
|
"pthread_cond_t", "pthread_mutex_t"))
|
||||||
|
.bind("type_decl"));
|
||||||
auto BadEitherType = anyOf(BadFILEType, BadPOSIXType);
|
auto BadEitherType = anyOf(BadFILEType, BadPOSIXType);
|
||||||
|
|
||||||
Finder->addMatcher(
|
Finder->addMatcher(
|
||||||
|
|
Loading…
Reference in New Issue