Hi, apologies for the delayed reply. I was having some college commitments. On Wed, Mar 31, 2021 at 11:22 PM David Malcolm <dmalc...@redhat.com> wrote:
> On Wed, 2021-03-31 at 21:41 +0530, Saloni Garg wrote: > > On Tue, Mar 30, 2021 at 6:42 PM David Malcolm <dmalc...@redhat.com> > > wrote: > > > > > On Tue, 2021-03-30 at 16:06 +0530, Saloni Garg wrote: > > > > On Sun, Mar 28, 2021 at 8:03 PM David Malcolm < > > > > dmalc...@redhat.com> > > > > wrote: > > [...snip...] > > > > > > > No, it's actually fun learning all this. Thank you for sharing all > > the > > references. Although, I was already using gdb to travel inside the > > code. > > Great! > > > > > > > > > > Please, let me know your thoughts on this. > > > > > > > > > > Looks like you're making a great start. > > > > > > > > > Thanks for the feedback. In parallel, can I start working on the > > > > Gsoc > > > > proposal as well? > > > > > > Please do work on the formal proposal - without it we can't accept > > > you > > > as a GSoC student. The window for submitting proposals opened > > > yesterday, and I believe it closes in a couple of weeks, and you > > > need > > > to do that, so any experimentation you do now should really just be > > > in > > > support of writing a good proposal. It would be a shame to not > > > have a > > > good prospective candidate because they didn't allow enough time to > > > do > > > the proper GSoC paperwork before the deadline. > > > > > Thanks for understanding. Here is an initial draft ( > > > > > https://docs.google.com/document/d/1inkkU5B55s_FOWRzUuf38s7XEet65kc0dW3yFn0yh1M/edit?usp=sharing > > ) > > of my GSoC proposal. I am yet to fill in the missing blocks. > > Please, let me know if you have any comments on the document itself. > > Caveat: I'm not familiar with the expected format of such documents. > > Looks like a good first draft. I don't think there is any such expected format(I checked some previous years accepted proposals). I believe if we clearly write the expected goal and the tentative approach to reach it, that would be okay for the proposal. > > Some notes: > - maybe update the title to be more specific (i.e. that it's about > extending the pass to support C++ exception-handling) > Done. > - my email address is misspelled (missing the leading "d") > Really sorry. Done. > - in Example 2, maybe spell out why it's a leak - when does the > allocated buffer stop being referenceable? > Explained. Please let me know if you feel it has any loose ends. > - you have a simple example of a false negative; is it possible to give > a simple example of a false positive? (I think "new" is meant to raise > an exception if it fails, so a diagnostics about a NULL-deref on > unchecked new might be a false positive. I'm not sure) > I tried the following example: #include <new> #include <iostream> using namespace std; int *p; int* alloc() { return new int; } void free() { delete p; } int main() { try { p = alloc(); free(); } catch(...) { } return 0; } Please, have a look here (https://godbolt.org/z/8WvoaP67n). I believe it is a false positive, I am not sure, please confirm. > - maybe specify that this is exception-handling specifically for C++ > code (GCC supports many languages) > Done. > - "sample example programs": for "sample" did you mean to write > "simple" here? > By sample examples, I meant the test cases that shall be used to prove the correctness of the patches during the course. > - as well as understanding code, you'll need to understand data, > specifically getting a feel for the kinds of control flow graphs that > the analyzer is receiving as inputs i.e. what the analyzer "sees" when > the user inputs various C++ language constructs; what interprocedural > vs intraprocedural raise/try/catch situations look like, etc. > I am in the process to understand how the analyzer works. I believe I have just got a gist of the approach being used. The gimple graph has been processed in a Worklist manner. We analyze each statement and add predecessors/successors if there is some new information coming out of the analyzed statement. For example, In the memory leak examples discussed here, if at a statement I see a *new *expression, then I need to add all the nodes where this value can flow into, to find out a possible *free *expression to block the possible memory leak. In the case of interprocedural, I need to incorporate the effects of any function calls in between and see if it changes my analysis result or not. Please, let me know if I am wrong somewhere. -Saloni > > Hope this makes sense and is helpful > Dave > >