Created
October 10, 2025 10:49
-
-
Save rwmjones/24c51e49adea38fbb2368080072f01d3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| struct canary {} canary; | |
| #define check_expr_0(t, canary, ...) | |
| #define check_expr_1(t, arg, canary, ...) | |
| #define check_expr_2(t, arg0, arg1, canary, ...) | |
| #define check_expr_3(t, arg0, arg1, arg2, canary, ...) | |
| #define expr(t, ...) \ | |
| __extension__({ \ | |
| if (__builtin_constant_p (t)) { \ | |
| switch (t) { \ | |
| case EXPR_NULL: \ | |
| check_expr_0 (t,## __VA_ARGS__, canary); \ | |
| break; \ | |
| case EXPR_LIST: \ | |
| case EXPR_BYTE: \ | |
| case EXPR_ABS_OFFSET: \ | |
| case EXPR_ALIGN_OFFSET: \ | |
| case EXPR_REL_OFFSET: \ | |
| case EXPR_FILE: \ | |
| case EXPR_SCRIPT: \ | |
| case EXPR_STRING: \ | |
| case EXPR_NAME: \ | |
| check_expr_1 (t,## __VA_ARGS__, canary, 0); \ | |
| break; \ | |
| case EXPR_FILL: \ | |
| case EXPR_ASSIGN: \ | |
| case EXPR_REPEAT: \ | |
| check_expr_2 (t,## __VA_ARGS__, canary, 0, 0); \ | |
| break; \ | |
| case EXPR_SLICE: \ | |
| check_expr_3 (t,## __VA_ARGS__, canary, 0, 0, 0); \ | |
| break; \ | |
| } \ | |
| } \ | |
| expr (t, ##__VA_ARGS__); \ | |
| }) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment