media/webrtc/trunk/tools/clang/plugins/tests/base_refcounted.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/media/webrtc/trunk/tools/clang/plugins/tests/base_refcounted.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,121 @@
     1.4 +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
     1.5 +// Use of this source code is governed by a BSD-style license that can be
     1.6 +// found in the LICENSE file.
     1.7 +
     1.8 +#ifndef BASE_REFCOUNTED_H_
     1.9 +#define BASE_REFCOUNTED_H_
    1.10 +
    1.11 +namespace base {
    1.12 +
    1.13 +template <typename T>
    1.14 +class RefCounted {
    1.15 + public:
    1.16 +  RefCounted() {}
    1.17 +  ~RefCounted() {}
    1.18 +};
    1.19 +
    1.20 +template <typename T>
    1.21 +class RefCountedThreadSafe {
    1.22 + public:
    1.23 +  RefCountedThreadSafe() {}
    1.24 +  ~RefCountedThreadSafe() {}
    1.25 +};
    1.26 +
    1.27 +}  // namespace base
    1.28 +
    1.29 +// Ignore classes whose inheritance tree ends in WebKit's RefCounted base
    1.30 +// class. Though prone to error, this pattern is very prevalent in WebKit
    1.31 +// code, so do not issue any warnings.
    1.32 +namespace WebKit {
    1.33 +
    1.34 +template <typename T>
    1.35 +class RefCounted {
    1.36 + public:
    1.37 +  RefCounted() {}
    1.38 +  ~RefCounted() {}
    1.39 +};
    1.40 +
    1.41 +}  // namespace WebKit
    1.42 +
    1.43 +// Unsafe; should error.
    1.44 +class PublicRefCountedDtorInHeader
    1.45 +    : public base::RefCounted<PublicRefCountedDtorInHeader> {
    1.46 + public:
    1.47 +  PublicRefCountedDtorInHeader() {}
    1.48 +  ~PublicRefCountedDtorInHeader() {}
    1.49 +
    1.50 + private:
    1.51 +  friend class base::RefCounted<PublicRefCountedDtorInHeader>;
    1.52 +};
    1.53 +
    1.54 +// Unsafe; should error.
    1.55 +class PublicRefCountedThreadSafeDtorInHeader
    1.56 +    : public base::RefCountedThreadSafe<
    1.57 +          PublicRefCountedThreadSafeDtorInHeader> {
    1.58 + public:
    1.59 +  PublicRefCountedThreadSafeDtorInHeader() {}
    1.60 +  ~PublicRefCountedThreadSafeDtorInHeader() {}
    1.61 +
    1.62 + private:
    1.63 +  friend class base::RefCountedThreadSafe<
    1.64 +      PublicRefCountedThreadSafeDtorInHeader>;
    1.65 +};
    1.66 +
    1.67 +// Safe; should not have errors.
    1.68 +class ProtectedRefCountedDtorInHeader
    1.69 +    : public base::RefCounted<ProtectedRefCountedDtorInHeader> {
    1.70 + public:
    1.71 +  ProtectedRefCountedDtorInHeader() {}
    1.72 +
    1.73 + protected:
    1.74 +  ~ProtectedRefCountedDtorInHeader() {}
    1.75 +
    1.76 + private:
    1.77 +  friend class base::RefCounted<ProtectedRefCountedDtorInHeader>;
    1.78 +};
    1.79 +
    1.80 +// Safe; should not have errors.
    1.81 +class PrivateRefCountedDtorInHeader
    1.82 +    : public base::RefCounted<PrivateRefCountedDtorInHeader> {
    1.83 + public:
    1.84 +  PrivateRefCountedDtorInHeader() {}
    1.85 +
    1.86 + private:
    1.87 +  ~PrivateRefCountedDtorInHeader() {}
    1.88 +  friend class base::RefCounted<PrivateRefCountedDtorInHeader>;
    1.89 +};
    1.90 +
    1.91 +// Unsafe; A grandchild class ends up exposing their parent and grandparent's
    1.92 +// destructors.
    1.93 +class DerivedProtectedToPublicInHeader
    1.94 +    : public ProtectedRefCountedDtorInHeader {
    1.95 + public:
    1.96 +  DerivedProtectedToPublicInHeader() {}
    1.97 +  ~DerivedProtectedToPublicInHeader() {}
    1.98 +};
    1.99 +
   1.100 +// Unsafe; A grandchild ends up implicitly exposing their parent and
   1.101 +// grantparent's destructors.
   1.102 +class ImplicitDerivedProtectedToPublicInHeader
   1.103 +    : public ProtectedRefCountedDtorInHeader {
   1.104 + public:
   1.105 +  ImplicitDerivedProtectedToPublicInHeader() {}
   1.106 +};
   1.107 +
   1.108 +// Unsafe-but-ignored; should not have errors.
   1.109 +class WebKitPublicDtorInHeader
   1.110 +    : public WebKit::RefCounted<WebKitPublicDtorInHeader> {
   1.111 + public:
   1.112 +  WebKitPublicDtorInHeader() {}
   1.113 +  ~WebKitPublicDtorInHeader() {}
   1.114 +};
   1.115 +
   1.116 +// Unsafe-but-ignored; should not have errors.
   1.117 +class WebKitDerivedPublicDtorInHeader
   1.118 +    : public WebKitPublicDtorInHeader {
   1.119 + public:
   1.120 +  WebKitDerivedPublicDtorInHeader() {}
   1.121 +  ~WebKitDerivedPublicDtorInHeader() {}
   1.122 +};
   1.123 +
   1.124 +#endif  // BASE_REFCOUNTED_H_

mercurial