Message ID | gkra7epx0lv.fsf@arm.com |
---|---|
State | New |
Headers | show |
Series | libgccjit: check result_type in gcc_jit_context_new_binary_op | expand |
On Mon, 2019-06-10 at 09:15 +0000, Andrea Corallo wrote: > Hi all, > I would like to propose this patch to check for the return type of > binary operators to be a numeric type. > Not doing so can lead the compiler into funny crashes. > > Does not introduce regressions running make check-jit. > > OK for trunk? > > Bests > Andrea > > 2019-06-09 Andrea Corallo andrea.corallo@arm.com > > * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to > be a > numeric type. Thanks for this patch. Please can you add a test case that triggers the error-handling case? (I'm trying to imagine a situation where this could have happened). See gcc/testsuite/jit.dg/test-error-new-binary-op-bad-op.c or similar. Dave
Hi all, second version for this patch. Given the suggestion for the bit-field one I've tried to improve also here the error message. I've added a simple testcase as requested, here I'm trying to do *void=int+int. This without checking would normally crash verifying gimple. More complex cases can be cause of crashes having the result type structures etc... Tested with make check-jit OK for trunk? Bests Andrea 2019-06-09 Andrea Corallo andrea.corallo@arm.com * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to be a numeric type. 2019-06-20 Andrea Corallo andrea.corallo@arm.com * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: New testcase.
On Mon, 2019-06-24 at 15:30 +0000, Andrea Corallo wrote: > Hi all, > second version for this patch. > Given the suggestion for the bit-field one I've tried to improve also > here the error message. Thanks. > I've added a simple testcase as requested, here I'm trying to do > *void=int+int. > This without checking would normally crash verifying gimple. Thanks. FWIW, I think the testcase can be simplified slightly, in that all that's needed is a bogus call to gcc_jit_context_new_binary_op, so I don't think the testcase needs the calls to: gcc_jit_context_new_function, gcc_jit_function_new_block, and gcc_jit_block_end_with_return, it just needs the types and the gcc_jit_context_new_binary_op call. > More complex cases can be cause of crashes having the > result type structures etc... > > Tested with make check-jit > OK for trunk? Looks good as-is, or you may prefer to simplify the testcase. Thanks for the patch. BTW, I don't see you listed in the MAINTAINERS file; are you able to commit patches yourself? Dave > Bests > Andrea > > 2019-06-09 Andrea Corallo andrea.corallo@arm.com > > * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to > be a > numeric type. > > > 2019-06-20 Andrea Corallo andrea.corallo@arm.com > > * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: > New testcase.
David Malcolm writes: > On Mon, 2019-06-24 at 15:30 +0000, Andrea Corallo wrote: >> Hi all, >> second version for this patch. >> Given the suggestion for the bit-field one I've tried to improve also >> here the error message. > > Thanks. > >> I've added a simple testcase as requested, here I'm trying to do >> *void=int+int. >> This without checking would normally crash verifying gimple. > > Thanks. FWIW, I think the testcase can be simplified slightly, in that > all that's needed is a bogus call to gcc_jit_context_new_binary_op, so > I don't think the testcase needs the calls to: > gcc_jit_context_new_function, > gcc_jit_function_new_block, and > gcc_jit_block_end_with_return, > it just needs the types and the gcc_jit_context_new_binary_op call. Hi Dave, thanks for your feedback. I've tried that but the reproducer is then incomplete with no call to gcc_jit_context_new_binary_op so I would keep it like it is if you are ok with that. >> More complex cases can be cause of crashes having the >> result type structures etc... >> >> Tested with make check-jit >> OK for trunk? > > Looks good as-is, or you may prefer to simplify the testcase. > > Thanks for the patch. > > BTW, I don't see you listed in the MAINTAINERS file; are you able to > commit patches yourself? > > Dave Sorry I realize my "OK for trunk?" was quite misleading. I'm not a maintainer and till now I have now write access so I can't apply patches myself. Bests Andrea >> Bests >> Andrea >> >> 2019-06-09 Andrea Corallo andrea.corallo@arm.com >> >> * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to >> be a >> numeric type. >> >> >> 2019-06-20 Andrea Corallo andrea.corallo@arm.com >> >> * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: >> New testcase.
On Mon, 2019-06-24 at 16:37 +0000, Andrea Corallo wrote: > David Malcolm writes: > > > On Mon, 2019-06-24 at 15:30 +0000, Andrea Corallo wrote: > > > Hi all, > > > second version for this patch. > > > Given the suggestion for the bit-field one I've tried to improve > > > also > > > here the error message. > > > > Thanks. > > > > > I've added a simple testcase as requested, here I'm trying to do > > > *void=int+int. > > > This without checking would normally crash verifying gimple. > > > > Thanks. FWIW, I think the testcase can be simplified slightly, in > > that > > all that's needed is a bogus call to gcc_jit_context_new_binary_op, > > so > > I don't think the testcase needs the calls to: > > gcc_jit_context_new_function, > > gcc_jit_function_new_block, and > > gcc_jit_block_end_with_return, > > it just needs the types and the gcc_jit_context_new_binary_op call. > > Hi Dave, > thanks for your feedback. > I've tried that but the reproducer is then incomplete with no call to > gcc_jit_context_new_binary_op so I would keep it like it is if you > are > ok with that. Sorry, I think I was unclear. What I meant is that I think you can remove the calls I mentioned, but keep the call to gcc_jit_context_new_binary_op, moving it to be a "top- level" call within create_code (discarding the result). That ought to be enough to trigger the error within the gcc_jit_context. Does that make more sense? > > > More complex cases can be cause of crashes having the > > > result type structures etc... > > > > > > Tested with make check-jit > > > OK for trunk? > > > > Looks good as-is, or you may prefer to simplify the testcase. > > > > Thanks for the patch. > > > > BTW, I don't see you listed in the MAINTAINERS file; are you able > > to > > commit patches yourself? > > > > Dave > > Sorry I realize my "OK for trunk?" was quite misleading. > I'm not a maintainer and till now I have now write access so I can't > apply patches myself. I believe ARM has a corporate copyright-assignment in place with the FSF for GCC contributions. I can commit the patch myself; alternatively, do you want to get commit access? Dave
David Malcolm writes: > On Mon, 2019-06-24 at 16:37 +0000, Andrea Corallo wrote: >> David Malcolm writes: >> >> > On Mon, 2019-06-24 at 15:30 +0000, Andrea Corallo wrote: >> > > Hi all, >> > > second version for this patch. >> > > Given the suggestion for the bit-field one I've tried to improve >> > > also >> > > here the error message. >> > >> > Thanks. >> > >> > > I've added a simple testcase as requested, here I'm trying to do >> > > *void=int+int. >> > > This without checking would normally crash verifying gimple. >> > >> > Thanks. FWIW, I think the testcase can be simplified slightly, in >> > that >> > all that's needed is a bogus call to gcc_jit_context_new_binary_op, >> > so >> > I don't think the testcase needs the calls to: >> > gcc_jit_context_new_function, >> > gcc_jit_function_new_block, and >> > gcc_jit_block_end_with_return, >> > it just needs the types and the gcc_jit_context_new_binary_op call. >> >> Hi Dave, >> thanks for your feedback. >> I've tried that but the reproducer is then incomplete with no call to >> gcc_jit_context_new_binary_op so I would keep it like it is if you >> are >> ok with that. > > Sorry, I think I was unclear. > > What I meant is that I think you can remove the calls I mentioned, but > keep the call to gcc_jit_context_new_binary_op, moving it to be a "top- > level" call within create_code (discarding the result). That ought to > be enough to trigger the error within the gcc_jit_context. > > Does that make more sense? Hi, sorry yes it absolutely does. What I meant is that in the test I did without these calls the produced reproducer test-error-gcc_jit_context_new_binary_op-bad-res-type.c.exe.reproducer.c was without the call to gcc_jit_context_new_binary_op. At the beginning I thought was due the removal of these other calls but I've just realized the obvious fact that we do not record at all if we catch an error there while recording... and that's the reason why the reproducer is without the call itself. By the way we could probably make this more clear in the gcc_jit_context_dump_reproducer_to_file doc. >> > > More complex cases can be cause of crashes having the >> > > result type structures etc... >> > > >> > > Tested with make check-jit >> > > OK for trunk? >> > >> > Looks good as-is, or you may prefer to simplify the testcase. >> > >> > Thanks for the patch. >> > >> > BTW, I don't see you listed in the MAINTAINERS file; are you able >> > to >> > commit patches yourself? >> > >> > Dave >> >> Sorry I realize my "OK for trunk?" was quite misleading. >> I'm not a maintainer and till now I have now write access so I can't >> apply patches myself. > > I believe ARM has a corporate copyright-assignment in place with the > FSF for GCC contributions. Correct, is thanks to that I was able to contribute in the past. > I can commit the patch myself; alternatively, do you want to get commit > access? > > Dave I think if I could get commit access would be great and certainly easier for everybody for the future. Thanks for the feedbacks on both the patches, I'll be able to update them most likely tomorrow. Bests Andrea
Hi, third version for this patch with the simplified test. make check-jit pass clean Bests Andrea 2019-06-09 Andrea Corallo andrea.corallo@arm.com * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to be a numeric type. 2019-06-20 Andrea Corallo andrea.corallo@arm.com * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: New testcase.
On Tue, 2019-06-25 at 08:11 +0000, Andrea Corallo wrote: > Hi, > third version for this patch with the simplified test. > > make check-jit pass clean > > Bests > Andrea > > 2019-06-09 Andrea Corallo andrea.corallo@arm.com > > * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to > be a > numeric type. > > > 2019-06-20 Andrea Corallo andrea.corallo@arm.com > > * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: > New testcase. Thanks for the updated patch. This is good for trunk. (Copying and pasting from my other review): are you working on getting SVN commit access, or do you want me to commit your two patches on your behalf? Thanks Dave
David Malcolm writes: > On Tue, 2019-06-25 at 08:11 +0000, Andrea Corallo wrote: >> Hi, >> third version for this patch with the simplified test. >> >> make check-jit pass clean >> >> Bests >> Andrea >> >> 2019-06-09 Andrea Corallo andrea.corallo@arm.com >> >> * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to >> be a >> numeric type. >> >> >> 2019-06-20 Andrea Corallo andrea.corallo@arm.com >> >> * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: >> New testcase. > > Thanks for the updated patch. > > This is good for trunk. > > (Copying and pasting from my other review): are you working on getting > SVN commit access, or do you want me to commit your two patches on your > behalf? > > Thanks > Dave Hi David, I can work on to get the SVN commit access. As a maintainer has to sponsor it would you mind being the one? Thanks Andrea
Andrea Corallo writes: > David Malcolm writes: > >> On Tue, 2019-06-25 at 08:11 +0000, Andrea Corallo wrote: >>> Hi, >>> third version for this patch with the simplified test. >>> >>> make check-jit pass clean >>> >>> Bests >>> Andrea >>> >>> 2019-06-09 Andrea Corallo andrea.corallo@arm.com >>> >>> * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type to >>> be a >>> numeric type. >>> >>> >>> 2019-06-20 Andrea Corallo andrea.corallo@arm.com >>> >>> * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: >>> New testcase. >> >> Thanks for the updated patch. >> >> This is good for trunk. >> >> (Copying and pasting from my other review): are you working on getting >> SVN commit access, or do you want me to commit your two patches on your >> behalf? >> >> Thanks >> Dave > > Hi David, > I can work on to get the SVN commit access. > As a maintainer has to sponsor it would you mind being the one? > > Thanks > Andrea Hi David, kind ping on this :) Best regards Andrea
On Wed, 2019-06-26 at 15:05 +0000, Andrea Corallo wrote: > David Malcolm writes: > > > On Tue, 2019-06-25 at 08:11 +0000, Andrea Corallo wrote: > > > Hi, > > > third version for this patch with the simplified test. > > > > > > make check-jit pass clean > > > > > > Bests > > > Andrea > > > > > > 2019-06-09 Andrea Corallo andrea.corallo@arm.com > > > > > > * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type > > > to > > > be a > > > numeric type. > > > > > > > > > 2019-06-20 Andrea Corallo andrea.corallo@arm.com > > > > > > * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: > > > New testcase. > > > > Thanks for the updated patch. > > > > This is good for trunk. > > > > (Copying and pasting from my other review): are you working on > > getting > > SVN commit access, or do you want me to commit your two patches on > > your > > behalf? > > > > Thanks > > Dave > > Hi David, > I can work on to get the SVN commit access. > As a maintainer has to sponsor it would you mind being the one? https://www.gnu.org/software/gcc/svnwrite.html says: "a well-established GCC maintainer (including reviewers) can approve for write access any person with GNU copyright assignment papers in place and known to submit good patches." Thanks for your patches so far. I approve of you getting "Write after approval" access to GCC svn, provided the copyright assignment paperwork is in place (which I'm assuming is, based on your @arm.com email address). I'm not quite sure what the next steps are. Dave
Hi David, Andrea, On 7/2/19 3:46 PM, David Malcolm wrote: > On Wed, 2019-06-26 at 15:05 +0000, Andrea Corallo wrote: > > David Malcolm writes: > > > > > On Tue, 2019-06-25 at 08:11 +0000, Andrea Corallo wrote: > > > > Hi, > > > > third version for this patch with the simplified test. > > > > > > > > make check-jit pass clean > > > > > > > > Bests > > > > Andrea > > > > > > > > 2019-06-09 Andrea Corallo andrea.corallo@arm.com > > > > > > > > * libgccjit.c (gcc_jit_context_new_binary_op): Check result_type > > > > to > > > > be a > > > > numeric type. > > > > > > > > > > > > 2019-06-20 Andrea Corallo andrea.corallo@arm.com > > > > > > > > * jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c: > > > > New testcase. > > > > > > Thanks for the updated patch. > > > > > > This is good for trunk. > > > > > > (Copying and pasting from my other review): are you working on > > > getting > > > SVN commit access, or do you want me to commit your two patches on > > > your > > > behalf? > > > > > > Thanks > > > Dave > > > > Hi David, > > I can work on to get the SVN commit access. > > As a maintainer has to sponsor it would you mind being the one? > > https://www.gnu.org/software/gcc/svnwrite.html says: > "a well-established GCC maintainer (including reviewers) can approve > for write access any person with GNU copyright assignment papers in > place and known to submit good patches." > > Thanks for your patches so far. > > I approve of you getting "Write after approval" access to GCC svn, > provided the copyright assignment paperwork is in place (which I'm > assuming is, based on your @arm.com email address). > > I'm not quite sure what the next steps are. > It means Andrea needs to fill out the form at https://sourceware.org/cgi-bin/pdw/ps_form.cgi with his SSH key and putting your address as an approver. You'll then get a request to approve it. Cheers, Kyrill > Dave
David Malcolm writes: >> Hi David, >> I can work on to get the SVN commit access. >> As a maintainer has to sponsor it would you mind being the one? > > https://www.gnu.org/software/gcc/svnwrite.html says: > "a well-established GCC maintainer (including reviewers) can approve > for write access any person with GNU copyright assignment papers in > place and known to submit good patches." > > Thanks for your patches so far. > > I approve of you getting "Write after approval" access to GCC svn, > provided the copyright assignment paperwork is in place (which I'm > assuming is, based on your @arm.com email address). > > I'm not quite sure what the next steps are. > > Dave Hi David, great thanks. I'll proceed with the following steps. Bests Andrea
Andrea Corallo writes: > David Malcolm writes: > >>> Hi David, >>> I can work on to get the SVN commit access. >>> As a maintainer has to sponsor it would you mind being the one? >> >> https://www.gnu.org/software/gcc/svnwrite.html says: >> "a well-established GCC maintainer (including reviewers) can approve >> for write access any person with GNU copyright assignment papers in >> place and known to submit good patches." >> >> Thanks for your patches so far. >> >> I approve of you getting "Write after approval" access to GCC svn, >> provided the copyright assignment paperwork is in place (which I'm >> assuming is, based on your @arm.com email address). >> >> I'm not quite sure what the next steps are. >> >> Dave > > Hi David, > great thanks. > I'll proceed with the following steps. > > Bests > Andrea Hi, I've pushed this patch into trunk as revision r273089. Thanks again for all the feedbacks on both patches. Bests Andrea
diff --git a/gcc/jit/libgccjit.c b/gcc/jit/libgccjit.c index e4f17f8..95a2c02 100644 --- a/gcc/jit/libgccjit.c +++ b/gcc/jit/libgccjit.c @@ -1345,6 +1345,10 @@ gcc_jit_context_new_binary_op (gcc_jit_context *ctxt, a->get_type ()->get_debug_string (), b->get_debug_string (), b->get_type ()->get_debug_string ()); + RETURN_NULL_IF_FAIL_PRINTF1 ( + result_type->is_numeric (), ctxt, loc, + "result_type type: %s is not numeric", + result_type->get_debug_string ()); return (gcc_jit_rvalue *)ctxt->new_binary_op (loc, op, result_type, a, b); }