зеркало из https://github.com/mozilla/gecko-dev.git
202 строки
6.9 KiB
C++
202 строки
6.9 KiB
C++
#define MOZ_MUST_USE_TYPE __attribute__((annotate("moz_must_use_type")))
|
|
|
|
struct Temporary { ~Temporary(); };
|
|
class MOZ_MUST_USE_TYPE MustUse {};
|
|
class MayUse {};
|
|
|
|
MustUse producesMustUse();
|
|
MustUse *producesMustUsePointer();
|
|
MustUse &producesMustUseRef();
|
|
|
|
MustUse producesMustUse(const Temporary& t);
|
|
MustUse *producesMustUsePointer(const Temporary& t);
|
|
MustUse &producesMustUseRef(const Temporary& t);
|
|
|
|
MayUse producesMayUse();
|
|
MayUse *producesMayUsePointer();
|
|
MayUse &producesMayUseRef();
|
|
|
|
void use(MustUse*);
|
|
void use(MustUse&);
|
|
void use(MustUse&&);
|
|
void use(MayUse*);
|
|
void use(MayUse&);
|
|
void use(MayUse&&);
|
|
void use(bool);
|
|
|
|
void foo() {
|
|
MustUse u;
|
|
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
u = producesMustUse();
|
|
u = producesMustUse(Temporary());
|
|
{
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
u = producesMustUse();
|
|
u = producesMustUse(Temporary());
|
|
}
|
|
if (true) {
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
u = producesMustUse();
|
|
u = producesMustUse(Temporary());
|
|
} else {
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
u = producesMustUse();
|
|
u = producesMustUse(Temporary());
|
|
}
|
|
|
|
if(true) producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
else producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
if(true) producesMustUsePointer();
|
|
else producesMustUsePointer();
|
|
if(true) producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
else producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
if(true) producesMayUse();
|
|
else producesMayUse();
|
|
if(true) producesMayUsePointer();
|
|
else producesMayUsePointer();
|
|
if(true) producesMayUseRef();
|
|
else producesMayUseRef();
|
|
if(true) u = producesMustUse();
|
|
else u = producesMustUse();
|
|
if(true) u = producesMustUse(Temporary());
|
|
else u = producesMustUse(Temporary());
|
|
|
|
while (true) producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
while (true) producesMustUsePointer();
|
|
while (true) producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
while (true) producesMayUse();
|
|
while (true) producesMayUsePointer();
|
|
while (true) producesMayUseRef();
|
|
while (true) u = producesMustUse();
|
|
while (true) u = producesMustUse(Temporary());
|
|
|
|
do producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
while (true);
|
|
do producesMustUsePointer();
|
|
while (true);
|
|
do producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
while (true);
|
|
do producesMayUse();
|
|
while (true);
|
|
do producesMayUsePointer();
|
|
while (true);
|
|
do producesMayUseRef();
|
|
while (true);
|
|
do u = producesMustUse();
|
|
while (true);
|
|
do u = producesMustUse(Temporary());
|
|
while (true);
|
|
|
|
for (;;) producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
for (;;) producesMustUsePointer();
|
|
for (;;) producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
for (;;) producesMayUse();
|
|
for (;;) producesMayUsePointer();
|
|
for (;;) producesMayUseRef();
|
|
for (;;) u = producesMustUse();
|
|
for (;;) u = producesMustUse(Temporary());
|
|
|
|
for (producesMustUse();;); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
for (producesMustUsePointer();;);
|
|
for (producesMustUseRef();;); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
for (producesMayUse();;);
|
|
for (producesMayUsePointer();;);
|
|
for (producesMayUseRef();;);
|
|
for (u = producesMustUse();;);
|
|
for (u = producesMustUse(Temporary());;);
|
|
|
|
for (;;producesMustUse()); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
for (;;producesMustUsePointer());
|
|
for (;;producesMustUseRef()); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
for (;;producesMayUse());
|
|
for (;;producesMayUsePointer());
|
|
for (;;producesMayUseRef());
|
|
for (;;u = producesMustUse());
|
|
for (;;u = producesMustUse(Temporary()));
|
|
|
|
use((producesMustUse(), false)); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
use((producesMustUsePointer(), false));
|
|
use((producesMustUseRef(), false)); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
use((producesMayUse(), false));
|
|
use((producesMayUsePointer(), false));
|
|
use((producesMayUseRef(), false));
|
|
use((u = producesMustUse(), false));
|
|
use((u = producesMustUse(Temporary()), false));
|
|
|
|
switch (1) {
|
|
case 1:
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
u = producesMustUse();
|
|
u = producesMustUse(Temporary());
|
|
case 2:
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
case 3:
|
|
producesMustUsePointer();
|
|
case 4:
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
case 5:
|
|
producesMayUse();
|
|
case 6:
|
|
producesMayUsePointer();
|
|
case 7:
|
|
producesMayUseRef();
|
|
case 8:
|
|
u = producesMustUse();
|
|
case 9:
|
|
u = producesMustUse(Temporary());
|
|
default:
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
u = producesMustUse();
|
|
u = producesMustUse(Temporary());
|
|
}
|
|
|
|
use(producesMustUse());
|
|
use(producesMustUsePointer());
|
|
use(producesMustUseRef());
|
|
use(producesMayUse());
|
|
use(producesMayUsePointer());
|
|
use(producesMayUseRef());
|
|
use(u = producesMustUse());
|
|
use(u = producesMustUse(Temporary()));
|
|
|
|
MustUse a = producesMustUse();
|
|
MustUse *b = producesMustUsePointer();
|
|
MustUse &c = producesMustUseRef();
|
|
MayUse d = producesMayUse();
|
|
MayUse *e = producesMayUsePointer();
|
|
MayUse &f = producesMayUseRef();
|
|
MustUse g = u = producesMustUse();
|
|
MustUse h = u = producesMustUse(Temporary());
|
|
}
|