<div dir="ltr"><div>Hi again,</div><div><br></div>I have been debugging a long time today and have some more info.<div><br></div><div>I've pinpointed it down to me calling <span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)">CI.</span><span class="" style="color:rgb(0,134,179);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)">getDiagnostics</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)">().</span><span class="" style="color:rgb(0,134,179);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)">Reset</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)">(); </span>in the function<span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)"> </span><span class="" style="color:rgb(121,93,163);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)">InjectTestSeamRecompile::BeginInvocation</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre-wrap;background-color:rgb(234,255,234)">(CompilerInstance &CI)</span></div><div><br></div><div>This reset calls:</div><div><div>  DiagStates.clear();</div><div>  DiagStatePoints.clear();</div><div>  DiagStateOnPushStack.clear();</div></div><div>Which seams to undo all the work that ProcessWarningOptions() did, making clang forget my command line warning options. Then most of the warnings fall back to ignored...</div><div><br></div><div>Of course I tried the quick way and commented out the Reset() call, but then Clang immediately crashes when compiling a file.</div><div>Can anyone advice me on a solution? Maybe I have to initialize the DiagnosticsEngine a second time and call ProcessWarningOptions() again?</div><div><br></div><div>Kind regards,</div><div><br></div><div>Ivan Koster</div><div><br><div class="gmail_extra"><br><div class="gmail_quote">2016-02-23 17:07 GMT+01:00 Ivan Koster <span dir="ltr"><<a href="mailto:ivankoster@gmail.com" target="_blank">ivankoster@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>I have finally made the easy-test-seam tool that I mentioned here: <a href="http://lists.llvm.org/pipermail/cfe-dev/2014-December/040578.html" target="_blank">http://lists.llvm.org/pipermail/cfe-dev/2014-December/040578.html</a></div><div><br></div><div>I'm really a cpp \ llvm newbie so it was a considerable effort. I've borrowed ideas from the FixItRecompile functionality and used the WrapperFrontendAction class.<br></div><div>The easy-test-seam functionality works, the generated code is correct.</div><div>The commit can be found on github here: <a href="https://github.com/ivankoster/clang/commit/14b48590af28129ba3ffcf647274dd483d0a22dc" target="_blank">https://github.com/ivankoster/clang/commit/14b48590af28129ba3ffcf647274dd483d0a22dc</a></div><div><br></div><div>The only sad part is:</div><div>I'm generating the AST twice, due to the wrapper action, but the diagnostics are not printed for the 2nd AST generation. This is very unfortunate, because the first generation of the AST is almost always guaranteed to contain warnings, because of the way I designed easy-test-seam. (We're essentially assigning a value to an identifier that is unassignable, but it becomes assignable in the 2nd generation...) And I want to suppress the first set of diagnostics, but let all the diagnostics from the 2nd generation through!</div><div><br></div><div>Could anyone take a look at my commit and see what I did wrong?</div><div>I've been looking at my code for a few hours now, but my lack of experience with the clang codebase is working against me.</div><div><br></div><div>Many thanks in advance!</div><span class=""><font color="#888888"><div><br></div><div>Ivan Koster</div><div><br></div></font></span></div>
</blockquote></div><br></div></div></div>