/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ struct Base { virtual ~Base(); }; struct Derived : Base { }; struct Virtual1 : virtual Base { }; struct Virtual2 : virtual Base { }; struct Virtual2a : Virtual2 { }; struct Other { virtual ~Other(); }; struct[[clang::annotate("loplugin:crosscast")]] Ok { virtual ~Ok(); }; Base* up(Derived* p) { return dynamic_cast(p); } Base& up(Derived& p) { return dynamic_cast(p); } Derived* down(Base* p) { return dynamic_cast(p); } Derived& down(Base& p) { return dynamic_cast(p); } Base* self(Base* p) { return dynamic_cast(p); } Base& self(Base& p) { return dynamic_cast(p); } Virtual1* crossVirtual(Virtual2a* p) { return dynamic_cast(p); } Virtual1& crossVirtual(Virtual2a& p) { return dynamic_cast(p); } Base* crossFromOther(Other* p) { // expected-error@+1 {{suspicious dynamic cross cast from 'Other *' to 'Base *' [loplugin:crosscast]}} return dynamic_cast(p); } Base& crossFromOther(Other& p) { // expected-error@+1 {{suspicious dynamic cross cast from 'Other' to 'Base &' [loplugin:crosscast]}} return dynamic_cast(p); } Other* crossToOther(Base* p) { // expected-error@+1 {{suspicious dynamic cross cast from 'Base *' to 'Other *' [loplugin:crosscast]}} return dynamic_cast(p); } Other& crossToOther(Base& p) { // expected-error@+1 {{suspicious dynamic cross cast from 'Base' to 'Other &' [loplugin:crosscast]}} return dynamic_cast(p); } Base* crossFromOk(Ok* p) { return dynamic_cast(p); } Base& crossFromOk(Ok& p) { return dynamic_cast(p); } Ok* crossToOk(Base* p) { return dynamic_cast(p); } Ok& crossToOk(Base& p) { return dynamic_cast(p); } void* mostDerived(Base* p) { return dynamic_cast(p); } template T generic1(Base* p) { return dynamic_cast(p); } template T* generic2(Base* p) { return dynamic_cast(p); } template Derived* generic3(T p) { return dynamic_cast(p); } template Derived* generic4(T* p) { return dynamic_cast(p); } /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */