| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Identifiers can start and/or contain '.' in PARSE_FLAG_ASM_FILE
- Move all GAS directives under TOK_ASMDIR prefix
This patches breaks compilation of the tccboot (linux 2.4.26
kernel). A test.S which fails with this patches:
#define SRC(y...) \
9999: y; \
.section __ex_table, "a"; \
.long 9999b, 6001f<---->; \
.previous
SRC(1:<>movw (%esi), %bx<------>)
// 029-test.S:7: error: macro 'SRC' used with too many args
|
| |
|
|
|
|
|
|
|
| |
Code like this was broken:
char volatile vi = i;
See testcase, happens in ideosyncratic legacy code sprinkling
volatile all over.
|
| |
|
|
|
| |
We really need to use PEEKC during tokenization so as to
skip line continuations automatically.
|
| |
|
|
|
|
| |
the check on incomplete struct/union/enum types was too early,
disallowing mixed specifiers and qualifiers. Simply rely on
the size (->c) field for that. See testcases.
|
| |
|
|
| |
Use only these tokens in `asm_parse_directive` and don't recycle others' tokens (like TOK_SECTION1)
|
| |
|
|
| |
Including labels, directives and section names
|
| |
|
|
| |
`macro_arg_subst`
|
| |
|
|
| |
Compiled tcc.exe location is under $(top_srcdir)/win32
|
| | |
|
| |
|
|
| |
build-tcc.bat
|
| | |
|
| |
|
|
| |
expansion
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Last fix didn't work for function f1int in the added testcase.
|
| |
|
|
| |
tccgen.c: fix fexible array member breaking struct alignment
|
| |
|
|
| |
Also add some test cases in tests/tests2/39_typedef.c.
|
| |
|
|
| |
This was fixed by 1c2dfa1 on 2015-11-21.
|
| |
|
|
|
|
|
| |
R_386_GOT32X can occur in object files assembled by new binutils, and in
particular do appear in glibc startup code (crt*.o). This patch is
modeled after the x86_64 one, handling the new relocation in the same
trivial way.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The introduction of read32le everywhere created a subtle issue, going
from
x = *(int*)p;
to
x = read32le(p);
is not equivalent if x is a larger than 32bit quantity, like an
address on x86_64, because read32le returns an unsigned int. The first
sign extends, the latter zero extends. This broke shared library
creation for gawk. It's enough to amend the case of the above
situation, cases like "write32le(p, read32le(p) +- something)" are okay,
no extensions happen or matter.
|
| |
|
|
|
|
| |
Whoops, we have our own <elf.h> copy, so I can just as well add
the symbol defines for the relocs instead of hard-coding numbers
in tccelf.c.
|
| |
|
|
|
|
|
|
|
| |
R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX can occur in object files
comiled by new binutils. They are not dynamic relocations, so normally
wouldn't be a problem for tcc (one doesn't normally mix object files
created by different compiler/binutils, static archives are so out :)).
If it weren't for the glibc startup code, crt*.o, of course. They now
do contain such relocs --> boom. Handle them in the trivial way.
|
| |
|
|
| |
Signed-off-by: Vincent Lefevre <vincent@vinc17.net>
|
| |
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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); }
|
| |
|
|
|
| |
There may be compiler-specific header files that should override
system headers. See TCC's include paths by running "tcc -vv".
|
| |
|
|
| |
tests/tests2/27_sizeof.*: Add test.
|
| |
|
|
| |
tests/tests2/78_vla_label.*: Add test.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
In gtst, vtop->c.i is not usually zero, but it is when compiling:
int f(void) { return 1 && 1 ? 1 : 1; }
|
| |
|
|
|
|
|
|
|
|
| |
for gas comments lonely on a line such as
# .. more stuff
where tcc would try to parse .. as a preprocessor directive
See also: 0b3612631f49ba0c008635aaa46ecf8be2eefcf7
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
tcc_normalize_inc_dirs: normally no problem to be absolutly
gcc compatible as long as it can be done the tiny way.
This reverts to the state before recent related commits and
reimplements a (small) part of it to fix the reported problem.
Also: Revert "parsing "..." sequence"
c3975cf27c792d493e76a2058a1eaf588324053e
&& p[1] == '.'
is not a reliable way to lookahead
|
| |
|
|
|
|
|
| |
- avoid memory allocation by using its (int) token number
- avoid additional function parameter by using Attribute
Also: fix some strange looking error messages
|
| |
|
|
| |
tests/tests2/78_vla_label.c: Check that int a[1 ? 1 : 1] is not a VLA.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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);
|
| |
|
|
|
| |
1. Handle array types.
2. Print the type qualifiers of pointers.
|
| | |
|
| |
|
|
|
| |
This stops UBSan from giving runtime misaligned address errors
and might eventually allow building on a non-little-endian host.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Also make some functions more portable.
|