On Fri, Aug 20, 2021 at 01:51:26PM +0200, grischka wrote: > That's good, but as you may guess, none of the tests that so far > exist was made specifically to test your new feature. See for > example: > > #pragma pack(push+1) > #pragma pack(pop) > #pragma pack(push) > struct foo { char c; int d; }; > #pragma pack(pop) > main() { printf("size: %d\n", sizeof (struct foo)); } > > should notify the user about the typo, and when you replace > the '+' by a ',' it should print 'size: 8' (not '5'). Yes.This is my mistake.I made a new patch and it fixes this problem. > > You can add one or two tests in 60_errors_and_warnings.c, > if you want. I did so.Now error message for above example is similar to the other pragma options.And a test was added. Please ONLY apply the patch I sent in this mail.
Suote127
diff --git a/tccgen.c b/tccgen.c index e0b5fd6..562ab09 100644 --- a/tccgen.c +++ b/tccgen.c @@ -4589,7 +4589,7 @@ static void struct_layout(CType *type, AttributeDef *ad) /* pragma pack overrides align if lesser and packs bitfields always */ if (pragma_pack) { - packed = 1; + packed = pragma_pack; if (pragma_pack < align) align = pragma_pack; /* in pcc mode pragma pack also overrides individual align */ diff --git a/tccpp.c b/tccpp.c index 897ef15..3b343a6 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1744,7 +1744,13 @@ static void pragma_parse(TCCState *s1) if (s1->pack_stack_ptr >= s1->pack_stack + PACK_STACK_SIZE - 1) goto stk_error; s1->pack_stack_ptr++; - skip(','); + if (tok == ')') { + *s1->pack_stack_ptr = *(s1->pack_stack_ptr - 1); + return; + } + if (tok !=',') + goto pragma_err; + next(); } if (tok != TOK_CINT) goto pragma_err; diff --git a/tests/tests2/60_errors_and_warnings.c b/tests/tests2/60_errors_and_warnings.c index 8a91512..b86f8c7 100644 --- a/tests/tests2/60_errors_and_warnings.c +++ b/tests/tests2/60_errors_and_warnings.c @@ -416,4 +416,6 @@ void func() fink(); } __attribute__((stuff)) int fink() {return 0;} +#elif defined test_pragma_pack_with_wrong_format +#pragma pack(push+1) #endif diff --git a/tests/tests2/60_errors_and_warnings.expect b/tests/tests2/60_errors_and_warnings.expect index a9dfa2d..6e5053b 100644 --- a/tests/tests2/60_errors_and_warnings.expect +++ b/tests/tests2/60_errors_and_warnings.expect @@ -203,3 +203,6 @@ bar : 3 ; 3 [test_switch_W4] 60_errors_and_warnings.c:416: warning: implicit declaration of function 'fink' 60_errors_and_warnings.c:418: error: 'stuff' attribute ignored + +[test_pragma_pack_with_wrong_format] +60_errors_and_warnings.c:420: error: malformed #pragma directive
_______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel