This PR fixes a regression that webkit.NoUncountedMemberChecker and alpha.webkit.NoUncheckedMemberChecker emits warnings for every class as if they supported ref counting and checked ptr because we were erroneously coercing the return value of isRefCountable and isCheckedPtrCapable, which is std::optional<bool>, to boolean values.
70 lines
1.5 KiB
C++
70 lines
1.5 KiB
C++
// RUN: %clang_analyze_cc1 -analyzer-checker=webkit.NoUncountedMemberChecker -verify %s
|
|
|
|
#include "mock-types.h"
|
|
#include "mock-system-header.h"
|
|
|
|
namespace members {
|
|
struct Foo {
|
|
private:
|
|
RefCountable* a = nullptr;
|
|
// expected-warning@-1{{Member variable 'a' in 'members::Foo' is a raw pointer to ref-countable type 'RefCountable'}}
|
|
|
|
[[clang::suppress]]
|
|
RefCountable* a_suppressed = nullptr;
|
|
|
|
protected:
|
|
RefPtr<RefCountable> b;
|
|
|
|
public:
|
|
RefCountable silenceWarningAboutInit;
|
|
RefCountable& c = silenceWarningAboutInit;
|
|
// expected-warning@-1{{Member variable 'c' in 'members::Foo' is a reference to ref-countable type 'RefCountable'}}
|
|
Ref<RefCountable> d;
|
|
};
|
|
|
|
template<class T>
|
|
struct FooTmpl {
|
|
T* a;
|
|
// expected-warning@-1{{Member variable 'a' in 'members::FooTmpl<RefCountable>' is a raw pointer to ref-countable type 'RefCountable'}}
|
|
};
|
|
|
|
void forceTmplToInstantiate(FooTmpl<RefCountable>) {}
|
|
|
|
struct [[clang::suppress]] FooSuppressed {
|
|
private:
|
|
RefCountable* a = nullptr;
|
|
};
|
|
}
|
|
|
|
namespace ignore_unions {
|
|
union Foo {
|
|
RefCountable* a;
|
|
RefPtr<RefCountable> b;
|
|
Ref<RefCountable> c;
|
|
};
|
|
|
|
template<class T>
|
|
union RefPtr {
|
|
T* a;
|
|
};
|
|
|
|
void forceTmplToInstantiate(RefPtr<RefCountable>) {}
|
|
}
|
|
|
|
namespace ignore_system_header {
|
|
|
|
void foo(RefCountable* t) {
|
|
MemberVariable<RefCountable> var { t };
|
|
var.obj->method();
|
|
}
|
|
|
|
} // ignore_system_header
|
|
|
|
namespace ignore_non_ref_countable {
|
|
struct Foo {
|
|
};
|
|
|
|
struct Bar {
|
|
Foo* foo;
|
|
};
|
|
} |