I'm attempting to improve the following diagnostic:<div><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; "><pre><span class="terminalStyle1" style="font-weight: bold; ">foo.cc:2:14: </span><span class="terminalStyle0"></span><span class="terminalStyle131" style="color: red; font-weight: bold; ">error: </span><span class="terminalStyle0"></span><span class="terminalStyle1" style="font-weight: bold; ">empty parameter list defined with a typedef of 'void' not allowed in C++
</span><span class="terminalStyle0">void test(foo);
</span><span class="terminalStyle132" style="color: green; font-weight: bold; ">             ^</span></pre></span></div><div>My main intent was to add a fixit that suggests replacing 'foo' with 'void' here. But I've come into two problems:</div>
<div><br></div><div>1) The source location of the unnamed (foo/void typed) parameter is the closing ')' - presumably this is meant to be pointing to the name of the variable, but that doesn't exist in this case. Should we be addressing this in some general way (I imagine lots of diagnostics might point to parameters & get the case of unnamed parameters wrong in the same way)?<br>
<br>2) I can't seem to find the source range of the entire parameter (though in this case, I'd settle for the source range of the type if that were easier). Using ParamVarDecl's getSourceRange to apply a replacement fixit to "void" I get a range that is too long, like this (the <span class="Apple-style-span" style="color: rgb(0, 128, 0); font-family: monospace; font-weight: bold; white-space: pre; font-size: medium; ">^</span> is corrected in this case as I also changed the diagnostic to apply to the Param's locStart rather than location) :</div>
<div><br></div><div><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; "><pre><span class="terminalStyle1" style="font-weight: bold; ">foo.cc:2:11: </span><span class="terminalStyle0"></span><span class="terminalStyle131" style="color: red; font-weight: bold; ">error: </span><span class="terminalStyle0"></span><span class="terminalStyle1" style="font-weight: bold; ">empty parameter list defined with a typedef of 'void' not allowed in C++
</span><span class="terminalStyle0">void test(foo);
</span><span class="terminalStyle132" style="color: green; font-weight: bold; ">          ^~~~
</span><span class="terminalStyle0"></span><span class="terminalStyle032" style="color: green; ">          void</span></pre></span></div><div>again - is this by design (in which case I'd need a local workaround/another way to find the desired source range), or should the range incorrect in general? </div>
<div><br></div><div>Thanks,</div><div>- David</div>