From 7f1ab9b1e111b9ea9261eec4b7c6fb0f42591eef Mon Sep 17 00:00:00 2001 From: grischka Date: Sun, 16 Jul 2017 12:10:00 +0200 Subject: tccgen: nodata_wanted The existing variable 'nocode_wanted' is now used to control output of static data too. So... (nocode_wanted == 0) code and data (normal within functions) (nocode_wanted < 0) means: no code, but data (global or static data) (nocode_wanted > 0) means: no code and no data (code and data suppressed) (nocode_wanted & 0xC0000000) means: we're in declaration of static data Also: new option '-dT' to be used with -run tcc -dT -run file.c This will look in file.c for certain comment-boundaries: /*-* test-xxx: ...some description */ and then for each test below run it from memory. This way various features and error messages can be tested with one single file. See 96_nodata_wanted.c for an example. Also: tccgen.c: one more bitfield fix --- tests/tests2/96_nodata_wanted.c | 74 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 tests/tests2/96_nodata_wanted.c (limited to 'tests/tests2/96_nodata_wanted.c') diff --git a/tests/tests2/96_nodata_wanted.c b/tests/tests2/96_nodata_wanted.c new file mode 100644 index 0000000..6f7f3c2 --- /dev/null +++ b/tests/tests2/96_nodata_wanted.c @@ -0,0 +1,74 @@ +/*****************************************************************************/ +/* test 'nodata_wanted' data output suppression */ + +/*-* test 1: initializer not computable 1 */ +void foo() { + if (1) { + static short w = (int)&foo; /* error */ + } +} + +/*-* test 2: initializer not computable 2 */ +void foo() { + if (0) { + static short w = (int)&foo; /* error */ + } +} + +/*-* test 3: initializer not computable 3 */ +void foo(); +static short w = (int)&foo; /* error */ + + +/*-* test 4: 2 cast warnings */ +void foo() { + short w = &foo; /* no error */ +} + +/*-* test 5; nodata_wanted test */ +#include + +#define DATA_LBL(s) \ + __asm__(".global d"#s",t"#s"\n.data\nd"#s":\n.text\nt"#s":\n"); \ + extern char d##s[],t##s[]; + +#define PROG \ + static void *p = (void*)&main;\ + static char cc[] = "static string";\ + static double d = 8.0;\ + static struct __attribute__((packed)) {\ + unsigned x : 12;\ + unsigned char y : 7;\ + unsigned z : 28, a: 4, b: 5;\ + } s = { 0x333,0x44,0x555555,6,7 };\ + printf(" static data: %d - %.1f - %.1f - %s - %s\n",\ + sizeof 8.0, 8.0, d, __FUNCTION__, cc);\ + printf(" static bitfields: %x %x %x %x %x\n", s.x, s.y, s.z, s.a, s.b); + +int main() +{ + printf("suppression off\n"); + DATA_LBL(s1); + if (1) { + PROG + } + DATA_LBL(e1); + printf(" data length is %s\n", de1 - ds1 ? "not 0":"0"); + //printf(" text length is %s\n", te1 - ts1 ? "not 0":"0"); + + printf("suppression on\n"); + DATA_LBL(s2); + if (0) { + PROG + } + DATA_LBL(e2); + printf(" data length is %x\n", de2 - ds2); + //printf(" text length is %X\n", te2 - ts2); + return 0; +} + +/*-* test 6: some test */ +int main() +{ + return 34; +} -- cgit v1.3.1