Edmund Grimley Evans
f5f82abc99
Insert spaces between certain tokens when tcc is invoked with -E.
...
Insert a space when it is required to prevent mistokenisation of
the output, and also in a few cases where it is not strictly
required, imitating GCC's behaviour.
2016-05-09 19:27:31 +01:00
Edmund Grimley Evans
0fbc77cac6
tests/tests2/Makefile: Make 85-asm-outside-function Intel-only.
2016-05-04 21:23:25 +01:00
Edmund Grimley Evans
a348513569
Revert 78e4ee5.
2016-05-04 20:27:39 +01:00
Edmund Grimley Evans
6015840583
Revert 3283c26 and a1c1390 in tccpp.c.
2016-05-04 20:14:39 +01:00
Edmund Grimley Evans
68ce8639bb
TODO: Add two issues.
2016-04-24 22:44:57 +01:00
Edmund Grimley Evans
f75f89fc8f
tccgen.c: In parse_btype, handle type qualifiers applied to arrays.
...
Also add some test cases in tests/tests2/39_typedef.c.
2016-01-11 07:51:58 +00:00
Edmund Grimley Evans
541b33591c
CodingStyle: Remove reference to misaligned struct CString.
...
This was fixed by 1c2dfa1 on 2015-11-21.
2016-01-06 19:09:28 +00:00
Edmund Grimley Evans
1c2dfa1f4b
Change the way struct CStrings are handled.
...
A CString used to be copied into a token string, which is an int array.
On a 64-bit architecture the pointers were misaligned, so ASan gave
lots of warnings. On a 64-bit architecture that required memory
accesses to be correctly aligned it would not work at all.
The CString is now included in CValue instead.
2015-11-26 12:40:50 +00:00
Edmund Grimley Evans
4886d2c640
TODO: Add two issues.
2015-11-26 12:31:23 +00:00
Edmund Grimley Evans
99372bb1d3
tccgen.c: Give error if statement expression found when const wanted.
...
Some test cases:
#define SE ({ switch (0) { } 0; })
// Should give error:
int x = SE;
void f(void) { static int x = SE; }
void f(void) { enum e { a = SE }; }
void f(void) { switch (0) { case SE: break; } }
// Correct:
int f(void) { return SE; }
int f(void) { return sizeof(SE); }
2015-11-26 12:28:42 +00:00
Edmund Grimley Evans
51c3465a49
tcc.h: Change order of built-in include paths: put TCC's own dir first.
...
There may be compiler-specific header files that should override
system headers. See TCC's include paths by running "tcc -vv".
2015-11-23 12:50:16 +00:00
Edmund Grimley Evans
7301b42e36
tccgen.c: Try to make sizeof(!x) work.
...
tests/tests2/27_sizeof.*: Add test.
2015-11-22 00:00:36 +00:00
Edmund Grimley Evans
737f984213
tccgen.c: Bug fix for 992cbda and 3ff77a1: set nocode_wanted.
...
tests/tests2/78_vla_label.*: Add test.
2015-11-21 23:58:58 +00:00
Edmund Grimley Evans
cfef9ac3f5
TODO: Add note on handling of floating-point values.
2015-11-21 10:35:47 +00:00
Edmund Grimley Evans
dd40d6a068
TODO: Add some issues.
2015-11-21 00:04:58 +00:00
Edmund Grimley Evans
5bd5fd488d
CodingStyle: Add notes on language and testing.
2015-11-20 23:41:01 +00:00
Edmund Grimley Evans
3ff77a1d6f
Improve constant propagation with "&&" and "||".
2015-11-20 23:33:49 +00:00
Edmund Grimley Evans
c7067aeb84
tccelf.c: On arm64, use read64le, and use uint64_t to check range.
2015-11-20 23:29:08 +00:00
Edmund Grimley Evans
4ae626451e
Bug fix for commit 553242c18a.
...
In gtst, vtop->c.i is not usually zero, but it is when compiling:
int f(void) { return 1 && 1 ? 1 : 1; }
2015-11-20 23:17:24 +00:00
Edmund Grimley Evans
992cbda8d0
tccgen.c: Recognise constant expressions with conditional operator.
...
tests/tests2/78_vla_label.c: Check that int a[1 ? 1 : 1] is not a VLA.
2015-11-20 00:24:46 +00:00
Edmund Grimley Evans
30c54c9d43
tccgen.c: In parse_btype, handle typedef types with added type qualifiers.
...
In a case like
typedef int T[1];
const T x;
we must make a copy of the typedef type so that we can add the type
qualifiers to it.
The following code used to give
error: incompatible types for redefinition of 'f'
typedef int T[1];
void f(const int [1]);
void f(const T);
2015-11-19 23:45:33 +00:00
Edmund Grimley Evans
58a34d22c9
tccgen.c: Improvements to type_to_str (only used for error messages).
...
1. Handle array types.
2. Print the type qualifiers of pointers.
2015-11-19 23:35:36 +00:00
Edmund Grimley Evans
ba99a70cd8
Trivial changes to avoid some compiler warnings.
2015-11-19 18:26:47 +00:00
Edmund Grimley Evans
553242c18a
Replace pointer casts with calls to (read|write)(16|32|64)le.
...
This stops UBSan from giving runtime misaligned address errors
and might eventually allow building on a non-little-endian host.
2015-11-19 18:21:14 +00:00
Edmund Grimley Evans
5d496b1695
tccgen.c: Avoid undefined behaviour in constant propagation.
2015-11-17 19:34:31 +00:00
Edmund Grimley Evans
569fba6db9
Merge the integer members of union CValue into "uint64_t i".
2015-11-17 19:09:35 +00:00
Edmund Grimley Evans
3712c958f4
tests/tests2/79_vla_continue.c: Fix off-by-one error.
2015-11-13 21:49:29 +00:00
Edmund Grimley Evans
c39bc9caa7
libtcc.c: Completely replace tcc_normalize_inc_dirs.
2015-11-11 21:18:01 +00:00
Edmund Grimley Evans
a7334f791d
arm64-gen.c: Avoid some cases of undefined behaviour.
...
Also make some functions more portable.
2015-11-09 23:06:05 +00:00
Edmund Grimley Evans
c52128c581
tccelf.c: Avoid two trivial instances of undefined behaviour.
2015-11-09 22:57:58 +00:00
Edmund Grimley Evans
eb00777309
tcctok.h: Put TOK_memmove in the correct places (I hope).
...
This should have been part of b051549 . Someone should test on ARM.
2015-11-05 19:37:04 +00:00
Edmund Grimley Evans
7f0b798418
tcctok.h: Revert 41408f2, which moved TOK_memmove.
2015-11-05 19:33:46 +00:00
Edmund Grimley Evans
f7dd3d49cc
lib/libtcc1.c: Replace "long" with "unsigned int" in union float_long.
2015-11-04 23:22:00 +00:00
Edmund Grimley Evans
24308fd292
tccpp.c: In TOK_GET, add comment warning about illegal cast.
...
Also, in tok_str_add2, use memcpy instead of the illegal cast.
Unfortunately, I can't see an easy way of fixing the bug.
2015-11-04 20:27:54 +00:00
Edmund Grimley Evans
20f0c179da
tccpp.c: Define and use tok_last for checking if last token is space.
2015-11-04 20:25:26 +00:00
Edmund Grimley Evans
b051549f2e
tccgen.c: Use memmove for struct assignment: dest and src may be equal.
2015-11-04 20:23:17 +00:00
Edmund Grimley Evans
8eab556ac5
tccgen.c: Fix memory leak involving asm_label.
2015-11-04 20:22:30 +00:00
Edmund Grimley Evans
9bf0e57509
tests/tcctest.c: Fix up format strings.
2015-11-04 20:20:26 +00:00
Edmund Grimley Evans
f4082851ea
Enable variable-length arrays on arm64.
...
arm64-gen.c: Implement gen_vla_sp_save, gen_vla_sp_restore, gen_vla_alloc.
tests/Makefile: Run vla_test on arm64.
2015-10-31 11:04:52 +00:00
Edmund Grimley Evans
f0b7566181
tccelf.c: Reset sym after call to build_got.
...
The call to build_got can cause symtab_section->data to be reallocated
(build_got -> add_elf_sym -> put_elf_sym -> section_ptr_add ->
section_realloc -> tcc_realloc). This is not obvious on a cursory
inspection, but fortunately Valgrind spotted it immediately.
Are there other, similar bugs that Valgrind did not detect?
2015-10-16 20:33:41 +01:00
Edmund Grimley Evans
743684fe39
tccpp.c: Avoid infinite loop on: printf '/**' | ./tcc -
2015-10-15 19:02:58 +01:00
Edmund Grimley Evans
c899659d39
tccgen.c: Remove undefined shift of negative signed value.
2015-10-15 19:02:57 +01:00
Edmund Grimley Evans
eafd7a7d3b
Correct prototype: void __clear_cache(void *, void *).
2015-10-15 19:02:54 +01:00
Edmund Grimley Evans
aa812e8745
Convert some lines from ISO-8859-1 to UTF-8.
...
perl -i -pe 'use Text::Iconv;
$c1 = Text::Iconv->new("utf-8", "utf-8");
$c2 = Text::Iconv->new("iso-8859-1", "utf-8");
if (!$c1->convert($_)) { $_ = $c2->convert($_); }' \
`find * -type f`
2015-03-11 07:30:03 +00:00
Edmund Grimley Evans
5de8b5638f
.gitignore: Add lib/arm64.
2015-03-10 22:38:26 +00:00
Edmund Grimley Evans
0e79df499a
tccgen.c: (!nocode_wanted) -> (nocode_wanted) in arm64 part.
2015-03-10 22:37:36 +00:00
Edmund Grimley Evans
d73b488401
arm64: Implement __clear_cache.
...
__clear_cache is defined in lib-arm64.c with a single call to
__arm64_clear_cache, which is the real built-in function and is
turned into inline assembler by gen_clear_cache in arm64-gen.c
2015-03-08 00:10:44 +00:00
Edmund Grimley Evans
03303628c7
tests/Makefile: Quote to avoid: /bin/sh: 1: [: !=: unexpected operator
2015-03-07 18:10:45 +00:00
Edmund Grimley Evans
d854dede03
arm64: Optimise some integer operations with a constant operand.
2015-03-07 17:42:08 +00:00
Edmund Grimley Evans
ac70e6b840
tccgen.c: Optimise 0<<x, 0>>x, -1>>x, x&0, x*0, x|-1, x%1.
...
More precisely, treat (0 << x) and so on as constant expressions, but
not if const_wanted as we do not want to allow "case (x*0):", ...
Do not optimise (0 / x) and (0 % x) here as x might be zero, though
for an architecture that does not generate an exception for division
by zero the back end might choose to optimise those.
2015-03-07 17:32:39 +00:00
Edmund Grimley Evans
9163393476
arm64-gen.c: In load(), do not sign-extend 32-bit VT_CONST.
2015-03-07 17:32:39 +00:00
Edmund Grimley Evans
238e760a29
Add __builtin_return_address.
...
Implementation is mostly shared with __builtin_frame_address.
It seems to work on arm64, i386 and x86_64. It may need to be
adapted for other targets.
2015-03-06 21:01:14 +00:00
Edmund Grimley Evans
3fb8b14806
tccelf.c: File path component is "arm64", not "ARM64".
2015-03-04 19:43:29 +00:00
Edmund Grimley Evans
1706d2254b
arm64-gen.c: Improve generation of stack offsets.
2015-03-02 20:51:03 +00:00
Edmund Grimley Evans
1d41da9590
arm64-gen.c: Rename some functions and add comments.
2015-03-02 20:45:58 +00:00
Edmund Grimley Evans
86e8dcd5e2
arm64: Improve constant generation, with tests.
2015-03-02 20:39:28 +00:00
Edmund Grimley Evans
883fd365c7
arm64-gen.c: Better explanation of relocation choice.
2015-03-01 11:31:10 +00:00
Edmund Grimley Evans
fc119f9840
73_arm64.c: Avoid taking address of return value.
2015-02-26 12:27:00 +00:00
Edmund Grimley Evans
8329facdfa
Add 73_arm64 for testing some arm64 things, mostly PCS.
2015-02-25 22:51:41 +00:00
Edmund Grimley Evans
a4d43618fb
arm64-gen.c: In gen_va_arg, handle the remaining HFA cases.
2015-02-25 22:51:41 +00:00
Edmund Grimley Evans
36bb8994dd
Relicensing TinyCC
2015-02-25 07:52:39 +00:00
Edmund Grimley Evans
97e08be344
tests/tcctest.c: Test COMPAT_TYPE(char *, signed char *).
2015-02-24 19:35:31 +00:00
Edmund Grimley Evans
40f7e11c53
tccgen.c: Make sure that gen_op always returns an rvalue.
...
Either this fix, or an alternative one, is required for arm64.
2015-02-23 22:51:10 +00:00
Edmund Grimley Evans
b14ef0e24b
Add arm64 (AArch64) as a target architecture.
2015-02-23 22:51:03 +00:00
Edmund Grimley Evans
738606dbd5
Use RELA relocations properly for R_DATA_PTR on x86_64.
...
libtcc.c: Add greloca, a generalisation of greloc that takes an addend.
tcc.h: Add greloca and put_elf_reloca.
tccelf.c: Add put_elf_reloca, a generalisation of put_elf_reloc.
tccgen.c: On x86_64, use greloca instead of greloc in init_putv.
2015-02-21 21:29:03 +00:00
Edmund Grimley Evans
86c850fc58
tcc-doc.texi: Explain VT_LLOCAL a bit better.
...
And delete the sentence about it being removed.
2015-02-20 23:29:21 +00:00
Edmund Grimley Evans
ff3f9aa6ba
Fix handling of case_reg in switch statement.
...
The back end functions gen_op(comparison) and gtst() might allocate
registers so case_reg should be left on the value stack while they
are called and set again afterwards.
2015-02-20 23:16:00 +00:00