[cfe-dev] Any known issues with clang_getDiagnosticNumRanges() in libclang?

David Blaikie dblaikie at gmail.com
Tue Apr 22 15:42:58 PDT 2014


On Tue, Apr 22, 2014 at 3:31 PM, Michael Bolin <bolinfest at gmail.com> wrote:
> Ah, if the contents of example.c are simply:
>
> main() {}
>
> And then I run:
>
> clang example.c
>
> I get:
>
> example.c:1:1: warning: type specifier missing, defaults to 'int'
> [-Wimplicit-int]
> main() {}
> ^~~~
> 1 warning generated.
>
> So there are ranges, just not for as many diagnostic types as I would
> expect. Would patches to add more range information be welcome?

Depends if they add value - in the case of the return example, the
diagnostic points to the one token that's relevant - it's not
necessary to describe that with a range. (it could be a purely UI
level feature to have diagnostics tokens be displayed as highlighted
ranges - but it's not necessary to have all the diagnostics manually
add the range of their one token to the diagnostic)

Not sure what else might end up highlighted in your 'main' example
(ie: why there's a range there since it's only over one token - I
assume it's because it might be over multiple tokens in some cases,
but don't know what those cases are)

- David

>
>
>
> On Tue, Apr 22, 2014 at 3:26 PM, Michael Bolin <bolinfest at gmail.com> wrote:
>>
>> Hmm, I just tried running `clang -fdiagnostics-print-source-range-info
>> example.c` and I got:
>>
>> example.c:5:3: error: use of undeclared identifier 'retur'
>>    retur 0;
>>    ^
>> 1 error generated.
>>
>> So this has a caret identifying the source location, but there aren't any
>> tildes showing the source range, as I would expect. From
>> http://clang.llvm.org/diagnostics.html, I would expect most diagnostics to
>> include a range.
>>
>>
>>
>> On Tue, Apr 22, 2014 at 3:19 PM, Michael Bolin <bolinfest at gmail.com>
>> wrote:
>>>
>>> I am now calling clang_getDiagnosticNumRanges() from C and still get zero
>>> for the number of ranges. Here is my C code (main.c) that creates a
>>> CXTranslationUnit for a malformed file and dumps its diagnostics:
>>>
>>> https://gist.github.com/bolinfest/11196200
>>>
>>> Here is the malformed file, example.c, that I am using for testing:
>>>
>>> https://gist.github.com/bolinfest/11196225
>>>
>>> And here is the output when I run `./main.o example.c`:
>>>
>>> https://gist.github.com/bolinfest/11196241
>>>
>>> As you can see, I can get pretty much everything for the diagnostic
>>> (source location, category id, category name), but no source location. I
>>> would expect to get a source range associated that identifies the misspelled
>>> keyword. Any ideas? Are my expectations just wrong?
>>>
>>> Thank you,
>>> Michael
>>>
>>>
>>>
>>> On Fri, Apr 18, 2014 at 1:06 PM, Michael Bolin <bolinfest at gmail.com>
>>> wrote:
>>>>
>>>> I am using the Python wrapper for libclang (cindex.py), and none of my
>>>> diagnostics have any SourceRanges associated with them. When I create the
>>>> translation unit, I even make sure that -fprint-source-range-info and
>>>> -fdiagnostics-print-source-range-info are passed as arguments (though I
>>>> don't know if that is strictly necessary).
>>>>
>>>> AFAICT, I believe that the Python calling and configuration code is
>>>> correct:
>>>>
>>>>   conf.lib.clang_getDiagnosticNumRanges(self.diag)
>>>>
>>>>   ("clang_getDiagnosticNumRanges",
>>>>    [Diagnostic],
>>>>    c_uint),
>>>>
>>>> Are there any suggestions on how to debug this besides writing against
>>>> libclang directly in C to make sure everything is working there?
>>>>
>>>> Thank you,
>>>> Michael
>>>>
>>>
>>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>



More information about the cfe-dev mailing list