* disable a -fdollar-in-identifiers option in assembler files * a test is added This is a patch addon from Daniel Holden.
Unified · Split
| @@ -747,7 +747,7 @@ static int tcc_assemble_internal(TCCState *s1, int do_preprocess) · 746 unmodified lines | ||
| 747 | 747 | |
| 748 | 748 | ch = file->buf_ptr[0]; |
| 749 | 749 | tok_flags = TOK_FLAG_BOL | TOK_FLAG_BOF; |
| 750 | − parse_flags = PARSE_FLAG_ASM_COMMENTS; | |
| 750 | + parse_flags = PARSE_FLAG_ASM_COMMENTS | PARSE_FLAG_ASM_FILE; | |
| 751 | 751 | if (do_preprocess) |
| 752 | 752 | parse_flags |= PARSE_FLAG_PREPROCESS; |
| 753 | 753 | next(); |
| @@ -2313,9 +2313,11 @@ maybe_newline: · 2312 unmodified lines | ||
| 2313 | 2313 | } |
| 2314 | 2314 | break; |
| 2315 | 2315 | |
| 2316 | − /* treat $ as allowed char in indentifier */ | |
| 2317 | − case '$': if (!tcc_state->dollars_in_identifiers) goto parse_simple; | |
| 2318 | − | |
| 2316 | + /* dollar is allowed to start identifiers when not parsing asm */ | |
| 2317 | + case '$': | |
| 2318 | + if (!tcc_state->dollars_in_identifiers | |
| 2319 | + || (parse_flags & PARSE_FLAG_ASM_FILE)) goto parse_simple; | |
| 2320 | + | |
| 2319 | 2321 | case 'a': case 'b': case 'c': case 'd': |
| 2320 | 2322 | case 'e': case 'f': case 'g': case 'h': |
| 2321 | 2323 | case 'i': case 'j': case 'k': case 'l': |
| @@ -2338,7 +2340,8 @@ maybe_newline: · 16 unmodified lines | ||
| 2338 | 2340 | p++; |
| 2339 | 2341 | for(;;) { |
| 2340 | 2342 | c = *p; |
| 2341 | − if (!isidnum_table[c-CH_EOF]) | |
| 2343 | + if (!isidnum_table[c-CH_EOF] | |
| 2344 | + && (tcc_state->dollars_in_identifiers ? (c != '$') : 1)) | |
| 2342 | 2345 | break; |
| 2343 | 2346 | h = TOK_HASH_FUNC(h, c); |
| 2344 | 2347 | p++; |
| @@ -2373,7 +2376,8 @@ maybe_newline: · 28 unmodified lines | ||
| 2373 | 2376 | p--; |
| 2374 | 2377 | PEEKC(c, p); |
| 2375 | 2378 | parse_ident_slow: |
| 2376 | − while (isidnum_table[c-CH_EOF]) { | |
| 2379 | + while (isidnum_table[c-CH_EOF] | |
| 2380 | + || (tcc_state->dollars_in_identifiers ? (c == '$') : 0)) { | |
| 2377 | 2381 | cstr_ccat(&tokcstr, c); |
| 2378 | 2382 | PEEKC(c, p); |
| 2379 | 2383 | } |
| @@ -3202,9 +3206,9 @@ ST_FUNC void preprocess_new(void) · 822 unmodified lines | ||
| 3202 | 3206 | const char *p, *r; |
| 3203 | 3207 | |
| 3204 | 3208 | /* init isid table */ |
| 3209 | + | |
| 3205 | 3210 | for(i=CH_EOF;i<256;i++) |
| 3206 | − isidnum_table[i-CH_EOF] = (isid(i) || isnum(i) || | |
| 3207 | − (tcc_state->dollars_in_identifiers ? i == '$' : 0)); | |
| 3211 | + isidnum_table[i-CH_EOF] = isid(i) || isnum(i); | |
| 3208 | 3212 | |
| 3209 | 3213 | /* add all tokens */ |
| 3210 | 3214 | if (table_ident) { |
| @@ -199,7 +199,7 @@ ex%: $(top_srcdir)/examples/ex%.c · 198 unmodified lines | ||
| 199 | 199 | |
| 200 | 200 | # tiny assembler testing |
| 201 | 201 | asmtest.ref: asmtest.S |
| 202 | − $(CC) -Wa,-W -o asmtest.ref.o -c asmtest.S | |
| 202 | + $(CC) -m32 -Wa,-W -o asmtest.ref.o -c asmtest.S | |
| 203 | 203 | objdump -D asmtest.ref.o > asmtest.ref |
| 204 | 204 | |
| 205 | 205 | asmtest: asmtest.ref |
| @@ -94,8 +94,8 @@ TESTS = \ · 93 unmodified lines | ||
| 94 | 94 | 72_long_long_constant.test \ |
| 95 | 95 | 73_arm64.test \ |
| 96 | 96 | 74_nocode_wanted.test \ |
| 97 | − 75_array_in_struct_init.test | |
| 98 | − | |
| 97 | + 75_array_in_struct_init.test \ | |
| 98 | + 76_dollars_in_identifiers.test | |
| 99 | 99 | |
| 100 | 100 | # 34_array_assignment.test -- array assignment is not in C standard |
| 101 | 101 | |
| @@ -121,15 +121,19 @@ ARGS = · 19 unmodified lines | ||
| 121 | 121 | 31_args.test : ARGS = arg1 arg2 arg3 arg4 arg5 |
| 122 | 122 | 46_grep.test : ARGS = '[^* ]*[:a:d: ]+\:\*-/: $$' 46_grep.c |
| 123 | 123 | |
| 124 | +# Some tests might need different flags | |
| 125 | +FLAGS = | |
| 126 | +76_dollars_in_identifiers.test : FLAGS = -fdollars-in-identifiers | |
| 127 | + | |
| 124 | 128 | all test: $(filter-out $(SKIP),$(TESTS)) |
| 125 | 129 | |
| 126 | 130 | %.test: %.c |
| 127 | 131 | @echo Test: $*... |
| 128 | 132 | |
| 129 | − @$(TCC) -run $< $(ARGS) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output || true | |
| 133 | + @$(TCC) -run $(FLAGS) $< $(ARGS) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output || true | |
| 130 | 134 | @diff -Nbu $*.expect $*.output && rm -f $*.output |
| 131 | 135 | |
| 132 | − @($(TCC) $< -o $*.exe && ./$*.exe $(ARGS)) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output2 || true | |
| 136 | + @($(TCC) $(FLAGS) $< -o $*.exe && ./$*.exe $(ARGS)) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output2 || true | |
| 133 | 137 | @diff -Nbu $*.expect $*.output2 && rm -f $*.output2 $*.exe |
| 134 | 138 | |
| 135 | 139 | clean: |