diff options
| -rw-r--r-- | src/preprocess.c | 7 | ||||
| -rw-r--r-- | tests/106.sh | 50 |
2 files changed, 57 insertions, 0 deletions
diff --git a/src/preprocess.c b/src/preprocess.c index 3f0161d..e47a390 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -1157,8 +1157,15 @@ static void preprocess_group_part(Preprocessor* pp) { if (tok->kind == TokenKind_pp_directive_if || tok->kind == TokenKind_pp_directive_ifdef || tok->kind == TokenKind_pp_directive_ifndef) { preprocess_if_section(pp); + } else if (tok->kind == TokenKind_pp_directive_elif || tok->kind == TokenKind_pp_directive_elifdef || + tok->kind == TokenKind_pp_directive_elifndef || tok->kind == TokenKind_pp_directive_else || + tok->kind == TokenKind_pp_directive_endif) { + fatal_error("%s:%d: unexpected '%s'; no corresponding '#if'*", tok->loc.filename, tok->loc.line, + token_kind_stringify(tok->kind)); } else if (tok->kind == TokenKind_pp_directive_include) { preprocess_include_directive(pp); + } else if (tok->kind == TokenKind_pp_directive_embed) { + preprocess_embed_directive(pp); } else if (tok->kind == TokenKind_pp_directive_define) { preprocess_define_directive(pp); } else if (tok->kind == TokenKind_pp_directive_undef) { diff --git a/tests/106.sh b/tests/106.sh new file mode 100644 index 0000000..2a61a33 --- /dev/null +++ b/tests/106.sh @@ -0,0 +1,50 @@ +cat <<'EOF' > expected +main.c:1: unexpected '#elif'; no corresponding '#if'* +EOF +test_compile_error <<'EOF' +#elif +#endif + +int main() {} +EOF + +cat <<'EOF' > expected +main.c:1: unexpected '#endif'; no corresponding '#if'* +EOF +test_compile_error <<'EOF' +#endif + +int main() {} +EOF + +cat <<'EOF' > expected +main.c:1: unexpected '#else'; no corresponding '#if'* +EOF +test_compile_error <<'EOF' +#else +#endif + +int main() {} +EOF + +cat <<'EOF' > expected +main.c:4: expected '#endif', but got '<eof>' +EOF +test_compile_error <<'EOF' +#if 1 + +int main() {} +EOF + +cat <<'EOF' > a.h +#if 1 +EOF +cat <<'EOF' > expected +./a.h:2: expected '#endif', but got '<eof>' +EOF +test_compile_error <<'EOF' +#include "a.h" +#endif + +int main() {} +EOF |
