Avoid loplugin:refounting in uninstantiated template code
...causing e.g. false positive > In file included from shell/source/win32/spsupp/COMOpenDocuments_x64.cxx:11: > In file included from shell/source/win32/spsupp/COMOpenDocuments.cxx:16: > In file included from shell/inc/spsupp\COMOpenDocuments.hpp:21: > shell/inc/spsupp/COMRefCounted.hpp(35,13): error: cppu::OWeakObject subclass 'COMRefCounted<Interfaces...>' being deleted via delete, should be managed via rtl::Reference [loplugin:refcounting] > delete this; > ^~~~~~~~~~~ with clang-cl on Windows. (Ideally, this would be made up for with setting this plugins' shouldVisitTemplateInstantiations() to true, see the TODO added in compilerplugins/clang/test/refcounting.cxx, but that would cause lots of other findings, so is left out for now.) Change-Id: Ia52b13498a0c7169b37ecf4882ce84c3cc1d2cc4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111339 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
@@ -211,6 +211,9 @@ bool containsOWeakObjectSubclass(const QualType& qType) {
|
||||
bool containsOWeakObjectSubclass(const clang::Type* pType0) {
|
||||
if (!pType0)
|
||||
return false;
|
||||
if (pType0->isDependentType()) {
|
||||
return false;
|
||||
}
|
||||
const clang::Type* pType = pType0->getUnqualifiedDesugaredType();
|
||||
if (!pType)
|
||||
return false;
|
||||
|
||||
@@ -57,4 +57,19 @@ void test2(UnoObject* pUnoObject)
|
||||
delete pUnoObject;
|
||||
}
|
||||
|
||||
template <typename T> struct Dependent : T
|
||||
{
|
||||
void f() { delete this; }
|
||||
//TODO: missing expected error@+1 {{cppu::OWeakObject subclass 'Dependent<UnoObject>' being deleted via delete, should be managed via rtl::Reference [loplugin:refcounting]}}
|
||||
void g() { delete this; }
|
||||
};
|
||||
struct Dummy
|
||||
{
|
||||
};
|
||||
void dummy(Dependent<Dummy>* p1, Dependent<UnoObject>* p2)
|
||||
{
|
||||
p1->f();
|
||||
p2->g();
|
||||
}
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
|
||||
|
||||
Reference in New Issue
Block a user