Re: [Tinycc-devel] Request push
Le mercredi 02 juillet 2014, 00:07:02 jiang a écrit : I'm sorry, I was remiss. I did not find a space with gitk. This is my new commit:89000c18dc7d5ccb2687948f94fe49d392990dab That's great. Thanks. For the ;;; patch I won't be able to review for 2 weeks as I'll be away from my computer. See if you can find someone else to review or else wait for my return. Best regards, Thomas signature.asc Description: This is a digitally signed message part. ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
Re: [Tinycc-devel] Request push
I'm sorry, I was remiss. I did not find a space with gitk. This is my new commit:89000c18dc7d5ccb2687948f94fe49d392990dab Best regards, Jiang Le dimanche 29 juin 2014, 16:56:31 Thomas Preud'homme a écrit : Le dimanche 29 juin 2014, 12:32:57 大熊猫 a écrit : Thank you Thomas, I hope you agree with my request. Sure, as I said, provided that a testcase is added I'd be happy for you to commit the patch. Thanks for committing the patch Jiang. I have one comment: you should use a different name for your testcase as you are not testing the concatenation. You should name your tests macro_param_list or something like this. Also a minor nitpick: you left a trailing whitespace in both testcase in the line int c = 0xa; . It's not worth a commit in itself but since you will do a commit to rename the test, please fix it at the same time. Before you push I urge you to look at your diff with git. It will show you trailing whitespace by default (if not you can activate it with git config --global core.whitespace trailing-space,blank-at-eol,space-before-tab,blank-at-eof). Best regards, Thomas ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
Re: [Tinycc-devel] Request push
Struct improved algorithms and add struct warnings and other warnings. The following can be compiled: struct st{int a;;;}; If you do not have advice, tomorrow pushed into the mob. jiang commit 8be2fbd82ef16c8f846fccb46689827ed37997eb Author: jiang 30155...@qq.com Date: Mon Jun 30 16:40:16 2014 +0800 Add warning diff --git a/libtcc.c b/libtcc.c index 7caa7c1..79a2d2c 100644 --- a/libtcc.c +++ b/libtcc.c @@ -1397,8 +1397,9 @@ static const FlagDef warning_defs[] = { { offsetof(TCCState, warn_unsupported), 0, unsupported }, { offsetof(TCCState, warn_write_strings), 0, write-strings }, { offsetof(TCCState, warn_error), 0, error }, -{ offsetof(TCCState, warn_implicit_function_declaration), WD_ALL, - implicit-function-declaration }, +{ offsetof(TCCState, warn_implicit_function_declaration), WD_ALL, implicit-function-declaration }, +{ offsetof(TCCState, warn_return_type), WD_ALL, return-type }, +{ offsetof(TCCState, warn_char_subscripts), WD_ALL, char-subscripts }, }; ST_FUNC int set_flag(TCCState *s, const FlagDef *flags, int nb_flags, diff --git a/tcc.h b/tcc.h index c93cedf..596b22f 100644 --- a/tcc.h +++ b/tcc.h @@ -594,6 +594,8 @@ struct TCCState { int warn_error; int warn_none; int warn_implicit_function_declaration; +int warn_return_type; +int warn_char_subscripts; /* compile with debug symbol (and use them if error during execution) */ int do_debug; diff --git a/tccgen.c b/tccgen.c index 1a89d4a..227864e 100644 --- a/tccgen.c +++ b/tccgen.c @@ -2898,42 +2898,47 @@ static void struct_decl(CType *type, int u, int tdef) offset = 0; flexible = 0; while (tok != '}') { -parse_btype(btype, ad); +if(!parse_btype(btype, ad)){ +if (tok == ';'){ +skip(';'); +continue; +}else if(tok == TOK_EOF || tok == '{') +expect(specifier-qualifier-list at end of input); +} while (1) { - if (flexible) - tcc_error(flexible array member '%s' not at the end of struct, - get_tok_str(v, NULL)); +if (flexible) +tcc_error(flexible array member '%s' not at the end of struct, get_tok_str(v, NULL)); bit_size = -1; v = 0; type1 = btype; if (tok != ':') { type_decl(type1, ad, v, TYPE_DIRECT | TYPE_ABSTRACT); -if (v == 0 (type1.t VT_BTYPE) != VT_STRUCT) -expect(identifier); -if (type_size(type1, align) 0) { - if ((a == TOK_STRUCT) (type1.t VT_ARRAY) c) - flexible = 1; - else - tcc_error(field '%s' has incomplete type, - get_tok_str(v, NULL)); +if (v == 0 (type1.t VT_BTYPE) != VT_STRUCT){ +tcc_warning(declaration does not declare anything); +break; +}if (type_size(type1, align) 0) { +if ((a == TOK_STRUCT) (type1.t VT_ARRAY)) +flexible = 1; +else +tcc_error(field '%s' has incomplete type, get_tok_str(v, NULL)); } if ((type1.t VT_BTYPE) == VT_FUNC || (type1.t (VT_TYPEDEF | VT_STATIC | VT_EXTERN | VT_INLINE))) -tcc_error(invalid type for '%s', - get_tok_str(v, NULL)); +tcc_error(invalid type for '%s', get_tok_str(v, NULL)); } if (tok == ':') { next(); bit_size = expr_const(); /* XXX: handle v = 0 case for messages */ if (bit_size 0) -tcc_error(negative width in bit-field '%s', - get_tok_str(v, NULL)); +tcc_error(negative width in bit-field '%s', get_tok_str(v, NULL)); if (v bit_size == 0) -tcc_error(zero width for bit-field '%s', - get_tok_str(v, NULL)); +tcc_error(zero width for bit-field '%s', get_tok_str(v, NULL)); } -size = type_size(type1, align); +if(type1.t VT_VLA) +size = 0, align = 1; +else +size = type_size(type1,
Re: [Tinycc-devel] Request push
Le dimanche 29 juin 2014, 12:32:57 大熊猫 a écrit : Thank you Thomas, I hope you agree with my request. Sure, as I said, provided that a testcase is added I'd be happy for you to commit the patch. I'll change it a warning message, and then add some tests, along with a push up! Great. Not follow GCC blindly. I was too blind! I'm not very familiar with C99, but I think there is a lot to learn from GCC place! There are two reasons for that, the first is that GCC also has bugs and the second is that sometimes GCC deviates from the standard, especially if you don't specify -std=c99 of course. In this case, the correct behavior is defined it section 6.10.3 in the definition of the function-like macro. It says that it's a left parenthesis followed by an arbitrary number of identifier. Earlier in the document (section 6.4.2.1) an identifier is defined and it cannot contain any parenthesis, only digit, letters from in the range a-zA-Z, underscore ('_') and universal character (basically non ascii character with no ambiguity with any of those used in the language). jiang I'll push a patch. Please post the result before and I'll happily give you green light. Eventually, after a certain number of good patches you will be welcome to commit directly. Best regards, Thomas signature.asc Description: This is a digitally signed message part. ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
Re: [Tinycc-devel] Request push
I have other patches, but their ideas are not very mature, and later pushed to give you. jiang 于 2014年06月29日 16:56, Thomas Preud'homme 写道: Le dimanche 29 juin 2014, 12:32:57 大熊猫 a écrit : Thank you Thomas, I hope you agree with my request. Sure, as I said, provided that a testcase is added I'd be happy for you to commit the patch. I'll change it a warning message, and then add some tests, along with a push up! Great. Not follow GCC blindly. I was too blind! I'm not very familiar with C99, but I think there is a lot to learn from GCC place! There are two reasons for that, the first is that GCC also has bugs and the second is that sometimes GCC deviates from the standard, especially if you don't specify -std=c99 of course. In this case, the correct behavior is defined it section 6.10.3 in the definition of the function-like macro. It says that it's a left parenthesis followed by an arbitrary number of identifier. Earlier in the document (section 6.4.2.1) an identifier is defined and it cannot contain any parenthesis, only digit, letters from in the range a-zA-Z, underscore ('_') and universal character (basically non ascii character with no ambiguity with any of those used in the language). jiang I'll push a patch. Please post the result before and I'll happily give you green light. Eventually, after a certain number of good patches you will be welcome to commit directly. Best regards, Thomas ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
Re: [Tinycc-devel] Request push
Le lundi 23 juin 2014, 23:56:10 jiang a écrit : I'll push a patch. I'll take this as I'd like to commit/push this patch, what do you think of it? The patch itself looks good but it would be better if you add a testcase that would fail without your patch. You already have a program that exhibit the bug, you just need to transform it so that it returns 0 if tcc behaves correctly and 1 else. I also have a minor nitpick: \'%s\' may not appear in parameter list, get_tok_str(var, NULL) That is, use single quote and put the symbol at the beginning of the sentence, that would avoid the colon. If you fix those (testcase is very important), you are welcome to commit/push your patch. In the future it would be better if you provide a patch as given by git format-patch. This way we'd have the message that you intend to use in your commit. And finally please try to find a title more specific than Request push. Try to find a title that explain what you want to fix. In this case you could choose Fix identifier list parsing. If you can refer to a section in C99 standard in your message and your commit message that's the icing on the cake but we don't do it systematically ourselves. However I think it is good practice as GCC can sometimes deviate from the standard and we should try to adhere to the standard, not follow GCC blindly. Thanks for your patch. Best regards, Thomas signature.asc Description: This is a digitally signed message part. ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
[Tinycc-devel] Request push
Thank you Thomas, I hope you agree with my request. I'll change it a warning message, and then add some tests, along with a push up! Not follow GCC blindly. I was too blind! I'm not very familiar with C99, but I think there is a lot to learn from GCC place! jiang I'll push a patch. I'll take this as I'd like to commit/push this patch, what do you think of it? The patch itself looks good but it would be better if you add a testcase that would fail without your patch. You already have a program that exhibit the bug, you just need to transform it so that it returns 0 if tcc behaves correctly and 1 else. I also have a minor nitpick: \'%s\' may not appear in parameter list, get_tok_str(var, NULL) That is, use single quote and put the symbol at the beginning of the sentence, that would avoid the colon. If you fix those (testcase is very important), you are welcome to commit/push your patch. In the future it would be better if you provide a patch as given by git format-patch. This way we'd have the message that you intend to use in your commit. And finally please try to find a title more specific than Request push. Try to find a title that explain what you want to fix. In this case you could choose Fix identifier list parsing. If you can refer to a section in C99 standard in your message and your commit message that's the icing on the cake but we don't do it systematically ourselves. However I think it is good practice as GCC can sometimes deviate from the standard and we should try to adhere to the standard, not follow GCC blindly. Thanks for your patch. Best regards, Thomas___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
Re: [Tinycc-devel] Request push
Hi, On Sun, 22 Jun 2014, David Mertens wrote: Hey jiang, For each of these three patches, please explain the following: 1) When run with the version of tcc without your patch, what behavior do you get? What does the C99 spec tell us we should get? 2) How does the proposed patch alter the behavior of tcc? Also, it appears you did not read the links I provided about how to write good commit messages. Please re-read those and write better ones. Patch 2 at least also contains gratious whitespace changes creating lines longer than 80 character (I know, not a strict policy for TCC, but existing code mostly follows that). And patch 3 (the bitfield fiddling) certainly is wrong as explained in some other mail. Ciao, Michael. ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
[Tinycc-devel] Request push
I'll push a patch. bug: -- #define hexCh(c (c = 10 ? 'a' + c - 10 : '0' + c) hexCh(c); out: jiang@jiang:~/test$ ./tcc -E c4.c # 1 c4.c (c = 10 ? 'a' + c - 10 : '0' + c); --- #define hexCh(c/3) (c = 10 ? 'a' + c - 10 : '0' + c) hexCh(c); out: jiang@jiang:~/test$ ./tcc -E c4.c # 1 c4.c /3) (c = 10 ? 'a' + c - 10 : '0' + c); jiang@jiang:~/test$ after patch: # 1 c4.c c4.c:1: error: may not appear in macro parameter list: ( jiang@jiang:~/test$ jiang@jiang:~/test$ ./tcc -E c4.c # 1 c4.c c4.c:1: error: may not appear in macro parameter list: / jiang@jiang:~/test$ - g...@gitcafe.com:weixiao/tinycc.git Thank you for reminding jiang ? 2014?06?23? 09:50, tinycc-devel-requ...@nongnu.org ??: Hey jiang, For each of these three patches, please explain the following: 1) When run with the version of tcc without your patch, what behavior do you get? What does the C99 spec tell us we should get? 2) How does the proposed patch alter the behavior of tcc? Also, it appears you did not read the links I provided about how to write good commit messages. Please re-read those and write better ones. Thanks! David On Sun, Jun 22, 2014 at 3:41 AM, jiang 30155...@qq.com mailto:30155...@qq.com wrote: Here is a patch to push I hope to help you. jiang ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org mailto:Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel -- Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -- Brian Kernighan tinycc is a great project, and I am honored to join a project commit 87373cd0ec7f5b0c0de77565090bf9710d7107a0 Author: jiang 30155...@qq.com Date: Mon Jun 16 16:43:40 2014 +0800 #define bug fixes bug: #define hexCh(c (c = 10 ? 'a' + c - 10 : '0' + c) hexCh(c); diff --git a/tccpp.c b/tccpp.c index 053fd57..dfbc857 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1253,16 +1253,15 @@ ST_FUNC void parse_define(void) next_nomacro(); } if (varg TOK_IDENT) -tcc_error(badly punctuated parameter list); +tcc_error(may not appear in macro parameter list: \%s\, get_tok_str(varg, NULL)); s = sym_push2(define_stack, varg | SYM_FIELD, is_vaargs, 0); *ps = s; ps = s-next; if (tok != ',') -break; +continue; next_nomacro(); } -if (tok == ')') -next_nomacro_spc(); +next_nomacro_spc(); t = MACRO_FUNC; } tok_str_new(str); ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel
[Tinycc-devel] Request push
Here is a patch to push I hope to help you. jiang commit 512947a3cc497cee5e4f5c0aa3f17f81fa2bb18b Author: jiang 30155...@qq.com Date: Mon Jun 16 16:43:40 2014 +0800 #define bug fixes bug: #define hexCh(c (c = 10 ? 'a' + c - 10 : '0' + c) hexCh(c); diff --git a/tccpp.c b/tccpp.c index 053fd57..dfbc857 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1253,16 +1253,15 @@ ST_FUNC void parse_define(void) next_nomacro(); } if (varg TOK_IDENT) -tcc_error(badly punctuated parameter list); +tcc_error(may not appear in macro parameter list: \%s\, get_tok_str(varg, NULL)); s = sym_push2(define_stack, varg | SYM_FIELD, is_vaargs, 0); *ps = s; ps = s-next; if (tok != ',') -break; +continue; next_nomacro(); } -if (tok == ')') -next_nomacro_spc(); +next_nomacro_spc(); t = MACRO_FUNC; } tok_str_new(str); commit 588794e66871c1042ab96a644b0da19681268e78 Author: jiang 30155...@qq.com Date: Sun Jun 22 15:28:34 2014 +0800 Add warning diff --git a/libtcc.c b/libtcc.c index d761582..0f8477c 100644 --- a/libtcc.c +++ b/libtcc.c @@ -1404,8 +1404,9 @@ static const FlagDef warning_defs[] = { { offsetof(TCCState, warn_unsupported), 0, unsupported }, { offsetof(TCCState, warn_write_strings), 0, write-strings }, { offsetof(TCCState, warn_error), 0, error }, -{ offsetof(TCCState, warn_implicit_function_declaration), WD_ALL, - implicit-function-declaration }, +{ offsetof(TCCState, warn_implicit_function_declaration), WD_ALL, implicit-function-declaration }, +{ offsetof(TCCState, warn_return_type), WD_ALL, return-type }, +{ offsetof(TCCState, warn_char_subscripts), WD_ALL, char-subscripts }, }; ST_FUNC int set_flag(TCCState *s, const FlagDef *flags, int nb_flags, diff --git a/tcc.h b/tcc.h index d0859d3..5cf639f 100644 --- a/tcc.h +++ b/tcc.h @@ -601,6 +601,8 @@ struct TCCState { int warn_error; int warn_none; int warn_implicit_function_declaration; +int warn_return_type; +int warn_char_subscripts; /* compile with debug symbol (and use them if error during execution) */ int do_debug; diff --git a/tccgen.c b/tccgen.c index b2a7717..f134586 100644 --- a/tccgen.c +++ b/tccgen.c @@ -2927,13 +2927,12 @@ static void struct_decl(CType *type, int u, int tdef) if (tok != ':') { type_decl(type1, ad, v, TYPE_DIRECT | TYPE_ABSTRACT); if (v == 0 (type1.t VT_BTYPE) != VT_STRUCT) -expect(identifier); +expect(specifier-qualifier-list at end of input); if (type_size(type1, align) 0) { - if ((a == TOK_STRUCT) (type1.t VT_ARRAY)) - flexible = 1; - else - tcc_error(field '%s' has incomplete type, - get_tok_str(v, NULL)); +if ((a == TOK_STRUCT) (type1.t VT_ARRAY)) +flexible = 1; +else +tcc_error(field '%s' has incomplete type, get_tok_str(v, NULL)); } if ((type1.t VT_BTYPE) == VT_FUNC || (type1.t (VT_TYPEDEF | VT_STATIC | VT_EXTERN | VT_INLINE))) @@ -2945,13 +2944,14 @@ static void struct_decl(CType *type, int u, int tdef) bit_size = expr_const(); /* XXX: handle v = 0 case for messages */ if (bit_size 0) -tcc_error(negative width in bit-field '%s', - get_tok_str(v, NULL)); +tcc_error(negative width in bit-field '%s', get_tok_str(v, NULL)); if (v bit_size == 0) -tcc_error(zero width for bit-field '%s', - get_tok_str(v, NULL)); +tcc_error(zero width for bit-field '%s', get_tok_str(v, NULL)); } -size = type_size(type1, align); +if(type1.t VT_VLA) +size = 0, align = 1; +else +size = type_size(type1, align); if (ad.a.aligned) { if (align ad.a.aligned) align = ad.a.aligned; @@ -3041,13 +3041,18 @@ static void struct_decl(CType *type, int u, int tdef) *ps = ss; ps = ss-next; } -if (tok == ';' || tok == TOK_EOF) +if (tok == ';' || tok == '}')
Re: [Tinycc-devel] Request push
Hey jiang, For each of these three patches, please explain the following: 1) When run with the version of tcc without your patch, what behavior do you get? What does the C99 spec tell us we should get? 2) How does the proposed patch alter the behavior of tcc? Also, it appears you did not read the links I provided about how to write good commit messages. Please re-read those and write better ones. Thanks! David On Sun, Jun 22, 2014 at 3:41 AM, jiang 30155...@qq.com wrote: Here is a patch to push I hope to help you. jiang ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel -- Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -- Brian Kernighan ___ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel