// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UncountedCallArgsChecker -verify %s // expected-no-diagnostics class Base { public: inline void ref(); inline void deref(); }; class Derived : public Base { public: virtual ~Derived(); void ref() const; void deref() const; }; class SubDerived final : public Derived { }; class OtherObject { public: Derived* obj(); }; class String { }; template inline Target* dynamicDowncast(Source* source) { return static_cast(source); } template inline Target* checkedDowncast(Source* source) { return static_cast(source); } template inline Target* uncheckedDowncast(Source* source) { return static_cast(source); } template String toString(const Types&... values); void foo(OtherObject* other) { dynamicDowncast(other->obj()); checkedDowncast(other->obj()); uncheckedDowncast(other->obj()); toString(other->obj()); }