mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 16:58:38 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
110
build/clang-plugin/tests/TestNoAddRefReleaseOnReturn.cpp
Normal file
110
build/clang-plugin/tests/TestNoAddRefReleaseOnReturn.cpp
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
#define MOZ_NO_ADDREF_RELEASE_ON_RETURN __attribute__((annotate("moz_no_addref_release_on_return")))
|
||||
|
||||
struct Test {
|
||||
void AddRef();
|
||||
void Release();
|
||||
void foo();
|
||||
};
|
||||
|
||||
struct TestD : Test {};
|
||||
|
||||
struct S {
|
||||
Test* f() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
Test& g() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
Test h() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
};
|
||||
|
||||
struct SD {
|
||||
TestD* f() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
TestD& g() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
TestD h() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct X {
|
||||
T* f() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
T& g() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
T h() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct SP {
|
||||
T* operator->() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
};
|
||||
|
||||
Test* f() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
Test& g() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
Test h() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
|
||||
TestD* fd() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
TestD& gd() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
TestD hd() MOZ_NO_ADDREF_RELEASE_ON_RETURN;
|
||||
|
||||
void test() {
|
||||
S s;
|
||||
s.f()->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'f'}}
|
||||
s.f()->Release(); // expected-error{{'Release' cannot be called on the return value of 'f'}}
|
||||
s.f()->foo();
|
||||
s.g().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'g'}}
|
||||
s.g().Release(); // expected-error{{'Release' cannot be called on the return value of 'g'}}
|
||||
s.g().foo();
|
||||
s.h().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'h'}}
|
||||
s.h().Release(); // expected-error{{'Release' cannot be called on the return value of 'h'}}
|
||||
s.h().foo();
|
||||
SD sd;
|
||||
sd.f()->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'f'}}
|
||||
sd.f()->Release(); // expected-error{{'Release' cannot be called on the return value of 'f'}}
|
||||
sd.f()->foo();
|
||||
sd.g().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'g'}}
|
||||
sd.g().Release(); // expected-error{{'Release' cannot be called on the return value of 'g'}}
|
||||
sd.g().foo();
|
||||
sd.h().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'h'}}
|
||||
sd.h().Release(); // expected-error{{'Release' cannot be called on the return value of 'h'}}
|
||||
sd.h().foo();
|
||||
X<Test> x;
|
||||
x.f()->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'f'}}
|
||||
x.f()->Release(); // expected-error{{'Release' cannot be called on the return value of 'f'}}
|
||||
x.f()->foo();
|
||||
x.g().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'g'}}
|
||||
x.g().Release(); // expected-error{{'Release' cannot be called on the return value of 'g'}}
|
||||
x.g().foo();
|
||||
x.h().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'h'}}
|
||||
x.h().Release(); // expected-error{{'Release' cannot be called on the return value of 'h'}}
|
||||
x.h().foo();
|
||||
X<TestD> xd;
|
||||
xd.f()->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'f'}}
|
||||
xd.f()->Release(); // expected-error{{'Release' cannot be called on the return value of 'f'}}
|
||||
xd.f()->foo();
|
||||
xd.g().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'g'}}
|
||||
xd.g().Release(); // expected-error{{'Release' cannot be called on the return value of 'g'}}
|
||||
xd.g().foo();
|
||||
xd.h().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'h'}}
|
||||
xd.h().Release(); // expected-error{{'Release' cannot be called on the return value of 'h'}}
|
||||
xd.h().foo();
|
||||
SP<Test> sp;
|
||||
sp->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'operator->'}}
|
||||
sp->Release(); // expected-error{{'Release' cannot be called on the return value of 'operator->'}}
|
||||
sp->foo();
|
||||
SP<TestD> spd;
|
||||
spd->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'operator->'}}
|
||||
spd->Release(); // expected-error{{'Release' cannot be called on the return value of 'operator->'}}
|
||||
spd->foo();
|
||||
f()->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'f'}}
|
||||
f()->Release(); // expected-error{{'Release' cannot be called on the return value of 'f'}}
|
||||
f()->foo();
|
||||
g().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'g'}}
|
||||
g().Release(); // expected-error{{'Release' cannot be called on the return value of 'g'}}
|
||||
g().foo();
|
||||
h().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'h'}}
|
||||
h().Release(); // expected-error{{'Release' cannot be called on the return value of 'h'}}
|
||||
h().foo();
|
||||
fd()->AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'fd'}}
|
||||
fd()->Release(); // expected-error{{'Release' cannot be called on the return value of 'fd'}}
|
||||
fd()->foo();
|
||||
gd().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'gd'}}
|
||||
gd().Release(); // expected-error{{'Release' cannot be called on the return value of 'gd'}}
|
||||
gd().foo();
|
||||
hd().AddRef(); // expected-error{{'AddRef' cannot be called on the return value of 'hd'}}
|
||||
hd().Release(); // expected-error{{'Release' cannot be called on the return value of 'hd'}}
|
||||
hd().foo();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue