summaryrefslogtreecommitdiffstats
path: root/build/clang-plugin/tests/TestKnownLive.cpp
blob: 8d01160d1d4b846380367def8a3865f8011fdf9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <mozilla/RefPtr.h>

#define MOZ_KNOWN_LIVE __attribute__((annotate("moz_known_live")))

class Foo {
  // dummy refcounting
public:
  uint32_t AddRef() { return 0; }
  uint32_t Release() { return 0; }

private:
  ~Foo() = default;
};

class Bar {
  MOZ_KNOWN_LIVE RefPtr<Foo> mFoo;
  Bar() : mFoo(new Foo()) {}
  ~Bar() { mFoo = nullptr; }

  void Baz() {
    mFoo = nullptr; // expected-error {{MOZ_KNOWN_LIVE members can only be modified by constructors and destructors}}
  }
};

class Bar2 {
  MOZ_KNOWN_LIVE Foo *mFoo;
  Bar2() : mFoo(new Foo()) {}
  ~Bar2() { mFoo = nullptr; }

  void Baz() {
    mFoo = nullptr; // expected-error {{MOZ_KNOWN_LIVE members can only be modified by constructors and destructors}}
  }
};