void choix() { char choice; char *str; choice = ' '; while (choice != 'c' && choice != 'h' && choice != 'q' && choice != 'z' && choice != 'b' && choice != 'n') { str = readLine(); choice = str[0]; if (choice == 'c') casu(); else if (choice == 'h') hardcore(); else if (choice == 'b') blind(); else if (choice == 'n') noreturn(); else if (choice == 'z') { help(); choix(); } else if (choice == 'q') my_putstr("Merci d'avoir jouer ! Au revoir !\n"); else my_putstr("Rentrez une valeur correcte s'il vous plait\n"); } }
void prop(Reg *r, Bits ref, Bits cal) { Reg *r1, *r2; int z; for(r1 = r; r1 != R; r1 = r1->p1) { for(z=0; z<BITS; z++) { ref.b[z] |= r1->refahead.b[z]; if(ref.b[z] != r1->refahead.b[z]) { r1->refahead.b[z] = ref.b[z]; change++; } cal.b[z] |= r1->calahead.b[z]; if(cal.b[z] != r1->calahead.b[z]) { r1->calahead.b[z] = cal.b[z]; change++; } } switch(r1->prog->as) { case ACALL: if(noreturn(r1->prog)) break; for(z=0; z<BITS; z++) { cal.b[z] |= ref.b[z] | externs.b[z]; ref.b[z] = 0; } break; case ATEXT: for(z=0; z<BITS; z++) { cal.b[z] = 0; ref.b[z] = 0; } break; case ARET: for(z=0; z<BITS; z++) { cal.b[z] = externs.b[z] | ovar.b[z]; ref.b[z] = 0; } break; } for(z=0; z<BITS; z++) { ref.b[z] = (ref.b[z] & ~r1->set.b[z]) | r1->use1.b[z] | r1->use2.b[z]; cal.b[z] &= ~(r1->set.b[z] | r1->use1.b[z] | r1->use2.b[z]); r1->refbehind.b[z] = ref.b[z]; r1->calbehind.b[z] = cal.b[z]; } if(r1->active) break; r1->active = 1; } for(; r != r1; r = r->p1) for(r2 = r->p2; r2 != R; r2 = r2->p2link) prop(r2, r->refbehind, r->calbehind); }
/* mark all code reachable from firstp as alive */ static void mark(Prog *firstp) { Prog *p; for(p=firstp; p; p=p->link) { if(p->reg != dead) break; p->reg = alive; if(p->as != ACALL && p->to.type == D_BRANCH && p->to.branch) mark(p->to.branch); if(p->as == AJMP || p->as == ARET || (p->as == ACALL && noreturn(p))) break; } }
void rejouerNR() { char choix; char *str; my_putstr("Voulez-vous rejouez ? (y/n) "); choix = ' '; while (choix != 'y' && choix != 'n') { str = readLine(); choix = str[0]; if (choix == 'y') noreturn(); else if (choix == 'n') my_putstr("Merci d'avoir jouer ! A bientot !\n"); else my_putstr("Vous devez taper y ou n\n"); } }
std::string ErrorToString(Error const error) { switch (error) { case Error::OK: return "OK"; case Error::CANCELLED: return "CANCELLED"; case Error::UNKNOWN: return "UNKNOWN"; case Error::INVALID_ARGUMENT: return "INVALID_ARGUMENT"; case Error::DEADLINE_EXCEEDED: return "DEADLINE_EXCEEDED"; case Error::NOT_FOUND: return "NOT_FOUND"; case Error::ALREADY_EXISTS: return "ALREADY_EXISTS"; case Error::PERMISSION_DENIED: return "PERMISSION_DENIED"; case Error::UNAUTHENTICATED: return "UNAUTHENTICATED"; case Error::RESOURCE_EXHAUSTED: return "RESOURCE_EXHAUSTED"; case Error::FAILED_PRECONDITION: return "FAILED_PRECONDITION"; case Error::ABORTED: return "ABORTED"; case Error::OUT_OF_RANGE: return "OUT_OF_RANGE"; case Error::UNIMPLEMENTED: return "UNIMPLEMENTED"; case Error::INTERNAL: return "INTERNAL"; case Error::UNAVAILABLE: return "UNAVAILABLE"; case Error::DATA_LOSS: return "DATA_LOSS"; } noreturn(); }
void prop(Reg *r, Bits ref, Bits cal) { Reg *r1, *r2; int z; for(r1 = r; r1 != R; r1 = (Reg*)r1->f.p1) { for(z=0; z<BITS; z++) { ref.b[z] |= r1->refahead.b[z]; if(ref.b[z] != r1->refahead.b[z]) { r1->refahead.b[z] = ref.b[z]; change++; } cal.b[z] |= r1->calahead.b[z]; if(cal.b[z] != r1->calahead.b[z]) { r1->calahead.b[z] = cal.b[z]; change++; } } switch(r1->f.prog->as) { case ACALL: if(noreturn(r1->f.prog)) break; for(z=0; z<BITS; z++) { cal.b[z] |= ref.b[z] | externs.b[z]; ref.b[z] = 0; } break; case ATEXT: for(z=0; z<BITS; z++) { cal.b[z] = 0; ref.b[z] = 0; } break; case ARET: for(z=0; z<BITS; z++) { cal.b[z] = externs.b[z] | ovar.b[z]; ref.b[z] = 0; } break; default: // Work around for issue 1304: // flush modified globals before each instruction. for(z=0; z<BITS; z++) { cal.b[z] |= externs.b[z]; // issue 4066: flush modified return variables in case of panic if(hasdefer) cal.b[z] |= ovar.b[z]; } break; } for(z=0; z<BITS; z++) { ref.b[z] = (ref.b[z] & ~r1->set.b[z]) | r1->use1.b[z] | r1->use2.b[z]; cal.b[z] &= ~(r1->set.b[z] | r1->use1.b[z] | r1->use2.b[z]); r1->refbehind.b[z] = ref.b[z]; r1->calbehind.b[z] = cal.b[z]; } if(r1->f.active) break; r1->f.active = 1; } for(; r != r1; r = (Reg*)r->f.p1) for(r2 = (Reg*)r->f.p2; r2 != R; r2 = (Reg*)r2->f.p2link) prop(r2, r->refbehind, r->calbehind); }
void * forever_pthread (void *unused) { noreturn (); }
void * forever_pthread (void *unused) { incr_thread_count (); noreturn (); }
void * thread_entry (void *unused) { incr_thread_count (); noreturn (); }
// RUN: clang-cc -verify -fsyntax-only %s static void (*fp0)(void) __attribute__((noreturn)); static void __attribute__((noreturn)) f0(void) { fatal(); } // On K&R int f1() __attribute__((noreturn)); int g0 __attribute__((noreturn)); // expected-warning {{'noreturn' attribute only applies to function types}} int f2() __attribute__((noreturn(1, 2))); // expected-error {{attribute requires 0 argument(s)}} void f3() __attribute__((noreturn)); void f3() { return; // expected-error {{function 'f3' declared 'noreturn' should not return}} } #pragma clang diagnostic warning "-Winvalid-noreturn" void f4() __attribute__((noreturn)); void f4() { return; // expected-warning {{function 'f4' declared 'noreturn' should not return}} }