diff --git a/buddy/ChangeLog b/buddy/ChangeLog index cfe5b9e3f..7b0cf0d1f 100644 --- a/buddy/ChangeLog +++ b/buddy/ChangeLog @@ -1,3 +1,11 @@ +2011-04-04 Alexandre Duret-Lutz + + Remove more sanity checks when NDEBUG is set. + + * src/kernel.h (CHECKnc): New macro. + * src/kernel.c (bdd_var, bdd_low, bdd_high, bdd_ithvar, + bdd_nithvar): Use it. + 2011-04-03 Alexandre Duret-Lutz * src/kernel.h (CHECK, CHECKa, CHECKn): Disable if NDEBUG is set. diff --git a/buddy/src/kernel.c b/buddy/src/kernel.c index 5a430bb00..36492d0af 100644 --- a/buddy/src/kernel.c +++ b/buddy/src/kernel.c @@ -874,11 +874,13 @@ RETURN {* The I'th variable on succes, otherwise the constant false bdd *} ALSO {* bdd\_setvarnum, bdd\_nithvar, bddtrue, bddfalse *} */ BDD bdd_ithvar(int var) { +#ifndef NDEBUG if (var < 0 || var >= bddvarnum) { bdd_error(BDD_VAR); return bddfalse; } +#endif return bddvarset[var*2]; } @@ -900,11 +902,13 @@ ALSO {* bdd\_setvarnum, bdd\_ithvar, bddtrue, bddfalse *} */ BDD bdd_nithvar(int var) { +#ifndef NDEBUG if (var < 0 || var >= bddvarnum) { bdd_error(BDD_VAR); return bddfalse; } +#endif return bddvarset[var*2+1]; } @@ -937,10 +941,8 @@ RETURN {* The variable number. *} int bdd_var(BDD root) { CHECK(root); - if (root < 2) - return bdd_error(BDD_ILLBDD); - - return (bddlevel2var[LEVEL(root)]); + CHECKnc(root); + return bddlevel2var[LEVEL(root)]; } @@ -956,10 +958,8 @@ ALSO {* bdd\_high *} BDD bdd_low(BDD root) { CHECK(root); - if (root < 2) - return bdd_error(BDD_ILLBDD); - - return (LOW(root)); + CHECKnc(root); + return LOW(root); } @@ -975,10 +975,8 @@ ALSO {* bdd\_low *} BDD bdd_high(BDD root) { CHECK(root); - if (root < 2) - return bdd_error(BDD_ILLBDD); - - return (HIGH(root)); + CHECKnc(root); + return HIGH(root); } diff --git a/buddy/src/kernel.h b/buddy/src/kernel.h index b024dcc9b..05cb98c13 100644 --- a/buddy/src/kernel.h +++ b/buddy/src/kernel.h @@ -58,6 +58,7 @@ #define CHECK(r) (void)(r); #define CHECKa(r,a) (void)(r); (void)(a); #define CHECKn(r) (void)(r); +#define CHECKnc(r) (void)(r); #else /* Sanity check argument and return eventual error code */ #define CHECK(r)\ @@ -79,6 +80,12 @@ { bdd_error(BDD_ILLBDD); return; }\ else if (r >= 2 && LOW(r) == -1)\ { bdd_error(BDD_ILLBDD); return; } + + /* r is non-constant */ +#define CHECKnc(r)\ + if (root < 2) \ + return bdd_error(BDD_ILLBDD) + #endif /*=== SEMI-INTERNAL TYPES ==============================================*/ @@ -220,7 +227,7 @@ extern void bdd_fdd_done(void); extern void bdd_reorder_init(void); extern void bdd_reorder_done(void); -extern int bdd_reorder_ready(void); +extern int bdd_reorder_ready(void) __purefn; extern void bdd_reorder_auto(void); extern int bdd_reorder_vardown(int); extern int bdd_reorder_varup(int);