[PATCH] Add back 'remark' to libclang interface
Alp Toker
alp at nuanti.com
Mon Apr 28 02:16:15 PDT 2014
On 28/04/2014 10:11, Tobias Grosser wrote:
> Hi,
>
> in commit 207319 the remark libclang interface was removed by Alp due
> to backward compatibility concerns.
>
> The idea of this patch (and the identical original patch) is to expose
> 'remark' Diagnostics in the libclang interface. Is it implemented by
> adding a new diagnostics type to the libclang diagnostic enum
> (obviously not changing any existing enum values). This is the most
> straightforward implementation.
>
> The concerns raised in the revert commit where:
>
> It trivially broke almost any stable application checking for
> Severity >= CXDiagnostic_Error or indeed any other kind of severity
> comparison upon encountering a 'remark'.
>
> To not misunderstand this comment, if the user does not explicitly
> enable 'remarks', libclang based applications are _not_ broken and
> continue to work.
>
> An issue may appear if both the user enables 'remark' diagnostics
> explicitly and an application assumes that the set of diagnostic
> types does never change and, based on this assumption, contains code
> that checks the diagnostic type without handling unknown diagnostic
> types gracefully.
>
> This can be seen as backward compatibility issue, but my personal
> interpretation is that the application is relying here on undocumented
> assumptions. As possible issues only manifest in case the user
> explicitly requests remarks, I believe the proposed patch is fine.
>
> Alp, what is the actual use case that would break? Do you have an
> application that relies on these assumptions? How likely is it that a
> user will enable remark diagnostics for this application?
Hi Tobias,
I'll re-send this here for the benefit of the thread.
This is the typical usage of this interface from
tools/c-index-test/c-index-test.c:
static int checkForErrors(CXTranslationUnit TU) {
...
if (clang_getDiagnosticSeverity(Diag) >= CXDiagnostic_Error) {
DiagStr = clang_formatDiagnostic(Diag,
clang_defaultDiagnosticDisplayOptions());
fprintf(stderr, "%s\n", clang_getCString(DiagStr));
clang_disposeString(DiagStr);
clang_disposeDiagnostic(Diag);
return -1;
}
...
}
CXDiagnostic with value 5 is higher than CXDiagnostic_Error and there
are many applications using the outlined pattern that break following
the change, either by crashing or mis-categorising diagnostics as fatal
errors.
It's therefore not viable to extend the current API as proposed.
I suggest continuing to map these to warning as in my revert and adding
an accessor when there's a strong need, or extending the enum when the
libclang major version is bumped -- whichever happens sooner.
Alp.
>
> Any comments?
> Tobias
>
> P.S: Alp apparently has a better solution. I let him explain this
> solution himself.
--
http://www.nuanti.com
the browser experts
More information about the cfe-commits
mailing list