aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseyko <seyko2@gmail.com>2015-10-19 17:55:26 +0300
committerseyko <seyko2@gmail.com>2015-10-19 17:55:26 +0300
commitad1c01f96c31dc607aac20fe608ecafc723a7a5b (patch)
tree4795a175263b9f5da6f89c097be7ad35f7b2b684
parent6b9490b6ff5e47e88a39ce9523f54fc56ff0dd25 (diff)
downloadtinycc-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.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/tccpp.c b/tccpp.c
index 849ba8e..770873f 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -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: