[PATCH] Add diagnostic capabilities in LLVM (frontend part)
Quentin Colombet
qcolombet at apple.com
Tue Dec 17 16:15:01 PST 2013
Hi Hal,
Thanks for you feedbacks.
On Dec 17, 2013, at 3:53 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> Hi Quentin,
>
> Any reason you did not use phabricator for this patch?
I thought it was trivial enough not to require a phabricator.
>
> +def BackendInlineAsm : DiagGroup<"backend-inline-asm">;
>
> +def BackendStackSize : DiagGroup<"backend-stack-size">;
>
> +def BackendPlugin : DiagGroup<"backend-plugin">;
>
> Are these group names user-visible?
I think they are. At least, I get this name when a warning is issued:
warning: stack size exceeded (168) in main [-Wbackend-stack-size]
1 warning generated.
> If they are, do we want "backend" in the name?
I do not have any strong opinion on that.
This prefix makes it clear that these diagnostics are issued by the backend. I thought it may be useful to have a naming convention for those.
>
> + // FIXME: We should demangle the function name.
>
> + // FIXME: Is there a way to get a location for that function?
>
> + FullSourceLoc Loc;
>
> + Diags.Report(Loc, diag::warn_fe_backend_stack_size)
>
> + << D.getStackSize() << D.getFunction().getName();
>
> + return true;
>
> +}
>
> +
>
> We should figure this out ;)
This was part of the missing points, so if we can ,sure!
The question is should we hold the patch on that... I really do not know. At first glance, it does not seem easy to demangle function name, but I am not familiar with clang’s internal and I may have miss something obvious.
> -- Furthermore, since you put in the work to have the diagnostic printers, we should use that to handle this stack-size warning instead of using this special class.
I disagree. In my opinion the diagnostic printer should be reserved for unknown diagnostic (what we called plugins). Indeed, as soon as a diagnostic is statically known, I prefer to have a special case in the frontend so what the localization burden is in there (e.g., for the stack size warning the message string is in the related td file).
>
> Looking through CodeGenModule.cpp, it does not look like there is such a map currently, although it looks like we could maintain such a map in the CodeGenModule::GetOrCreateLLVMFunction function.
You mean to demangle function name?
-Quentin
>
> -Hal
>
> ----- Original Message -----
>> From: "Quentin Colombet" <qcolombet at apple.com>
>> To: "Dmitri Gribenko" <gribozavr at gmail.com>
>> Cc: "llvm cfe" <cfe-commits at cs.uiuc.edu>
>> Sent: Tuesday, December 17, 2013 5:03:36 PM
>> Subject: Re: [PATCH] Add diagnostic capabilities in LLVM (frontend part)
>>
>>
>>
>> Hi Dimitri,
>>
>> Thanks for the quick reply!
>>
>> New patch attached.
>>
>> On Dec 17, 2013, at 11:58 AM, Dmitri Gribenko <gribozavr at gmail.com>
>> wrote:
>>
>>> On Tue, Dec 17, 2013 at 11:22 AM, Quentin Colombet
>>> <qcolombet at apple.com> wrote:
>>>> - Tests.
>>>> I made some tests locally, but the patch does not add any test
>>>> case. The
>>>> question is how can we add tests that require both a backend and a
>>>> frontend
>>>> in either the frontend or the backend?
>>>
>>> A lot of tests in Clang have "REQUIRES: x86-registered-target" --
>>> please take a look at them.
>> Thanks, using your advice, I have added a test in
>> test/Frontend/backend-diagnostic.c.
>>
>>>
>>> About the patch:
>>>
>>> 80 columns.
>> Oh sorry about that, I was sure I had run clang-format… apparently
>> not!
>> Fixed.
>>
>>>
>>> +/// DiagnosticHandler2 - This function is invoked when the backend
>>> needs
>>> +/// to report something to the user.
>>>
>>> Please don't duplicate function name in comments.
>> Fixed.
>>
>>>
>>> +/// The \p DI interface provides two basic information:
>>> +/// getKind() helps to determines what it is reporting and
>>> +/// getSeverity() decribes how bad this is.
>>>
>>> This does not really belong to the documentation for
>>> DiagnosticHandler2(), I think.
>> Removed.
>>
>>>
>>> +#define SeveritySwitch(Severity, GroupName, DiagID)
>>> \
>>> + switch (Severity) {
>>> \
>>>
>>> Please wrap this in do {...} while(false), so that the trailing
>>> semicolon in the macro invocation gets correctly attached to the
>>> expansion.
>> Done.
>>
>>>
>>> Also, this macro could have a better name -- maybe ComputeSeverity?
>> Renamed into ComputeDiagID.
>>
>> Thanks,
>> -Quentin
>>
>>
>>
>>
>>>
>>> Dmitri
>>>
>>> --
>>> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
>>> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131217/089b5e27/attachment.html>
More information about the cfe-commits
mailing list