diff options
| author | seyko <seyko2@gmail.com> | 2015-10-19 17:55:26 +0300 |
|---|---|---|
| committer | seyko <seyko2@gmail.com> | 2015-10-19 17:55:26 +0300 |
| commit | ad1c01f96c31dc607aac20fe608ecafc723a7a5b (patch) | |
| tree | 4795a175263b9f5da6f89c097be7ad35f7b2b684 | |
| parent | 6b9490b6ff5e47e88a39ce9523f54fc56ff0dd25 (diff) | |
| download | tinycc-ad1c01f96c31dc607aac20fe608ecafc723a7a5b.tar.gz tinycc-ad1c01f96c31dc607aac20fe608ecafc723a7a5b.tar.bz2 | |
fix for the #include_next, v3
don't give an error and simply ingnore directive
if we detect a loop of the #include_next.
With this aproach coreutils-8.24.51-8802e
compiles, but with errors:
lib/libcoreutils.a: error: 'xnmalloc' defined twice
lib/libcoreutils.a: error: 'xnrealloc' defined twice
| -rw-r--r-- | tccpp.c | 18 |
1 files changed, 4 insertions, 14 deletions
@@ -1528,7 +1528,7 @@ ST_FUNC void preprocess(int is_bof) int i, c, n, saved_parse_flags; char buf[1024], *q; Sym *s; - int include_next_first_try = 1; + int include_next_count = 0; saved_parse_flags = parse_flags; parse_flags = PARSE_FLAG_PREPROCESS @@ -1618,7 +1618,6 @@ ST_FUNC void preprocess(int is_bof) /* store current file in stack, but increment stack later below */ *s1->include_stack_ptr = file; - search_again: n = s1->nb_include_paths + s1->nb_sysinclude_paths; for (i = -2; i < n; ++i) { char buf1[sizeof file->filename]; @@ -1654,19 +1653,13 @@ ST_FUNC void preprocess(int is_bof) if (tok == TOK_INCLUDE_NEXT) { for (f = s1->include_stack_ptr; f >= s1->include_stack; --f) - if (include_next_first_try) { if (0 == PATHCMP((*f)->filename, buf1)) { #ifdef INC_DEBUG printf("%s: #include_next skipping %s\n", file->filename, buf1); #endif - include_next_first_try++; + include_next_count++; goto include_trynext; } - } else { - if (0 == PATHCMP(file->filename, buf1)) { - goto include_trynext; - } - } } e = search_cached_include(s1, buf1); @@ -1698,11 +1691,8 @@ include_trynext: ch = file->buf_ptr[0]; goto the_end; } - if (include_next_first_try > 1) { - include_next_first_try = 0; - goto search_again; - } - tcc_error("include file '%s' not found", buf); + if (include_next_count == 0) + tcc_error("include file '%s' not found", buf); include_done: break; case TOK_IFNDEF: |
