зеркало из https://github.com/mozilla/gecko-dev.git
157 строки
5.4 KiB
C++
157 строки
5.4 KiB
C++
#define MOZ_MUST_USE __attribute__((annotate("moz_must_use")))
|
|
|
|
class MOZ_MUST_USE MustUse {};
|
|
class MayUse {};
|
|
|
|
MustUse producesMustUse();
|
|
MustUse *producesMustUsePointer();
|
|
MustUse &producesMustUseRef();
|
|
|
|
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() {
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
{
|
|
producesMustUse(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMustUsePointer();
|
|
producesMustUseRef(); // expected-error {{Unused value of must-use type 'MustUse'}}
|
|
producesMayUse();
|
|
producesMayUsePointer();
|
|
producesMayUseRef();
|
|
}
|
|
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();
|
|
} 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();
|
|
}
|
|
|
|
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();
|
|
|
|
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();
|
|
|
|
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);
|
|
|
|
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 (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 (;;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());
|
|
|
|
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));
|
|
|
|
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();
|
|
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();
|
|
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();
|
|
}
|
|
|
|
use(producesMustUse());
|
|
use(producesMustUsePointer());
|
|
use(producesMustUseRef());
|
|
use(producesMayUse());
|
|
use(producesMayUsePointer());
|
|
use(producesMayUseRef());
|
|
|
|
MustUse a = producesMustUse();
|
|
MustUse *b = producesMustUsePointer();
|
|
MustUse &c = producesMustUseRef();
|
|
MayUse d = producesMayUse();
|
|
MayUse *e = producesMayUsePointer();
|
|
MayUse &f = producesMayUseRef();
|
|
}
|