[LLVMdev] Out-of-source subclassses vs. LLVM's RTTI system

Tobias Grosser
Wed, 24 Jun 2015 22:34:26 -0000

On 06/24/2015 07:17 PM, Christian Convey wrote:
> Actually, I see an additional problem as well.  Even if I did manage to
> create my own out-of-source subclass of DiagnosticInfoOptimizationBase,
> there's still the question of how it would handle "Remark"
severity.
>
> To be consistent with the rest of the diagnostic classes, my subclass's
> /isEnabled /method should probably consult the
> /PassRemarksAnalysisOptLoc/ object when handling a message with severity
> = "remark".  Unfortunately the /PassRemarksAnalysisOptLoc/ object
has
> static linkage, so my code can't easily access it.
>
> The only way I can think to query it is to creaet a throw-away instance
> of some subclass of /DiagnosticInfoOptimizationBase/, and to provide
> that dummy's constructor with the same pass name that was provided to
my
> class's constructor.  Then I could call that dummy instance's
> "isEnabled" method to find out whether or not my own code should
emit
> the message.
>
> Unless someone has a cleaner way to do this, I think I'll just accept
> that the DiagnosticInfo stuff isn't designed for my use case, and move
on.

Sorry, I am a little in a rush, but did you see the
getNextAvailablePluginDiagnosticKind() method. This should allow you to
define your own DiagnosticKinds. I am not sure if this is sufficient for
you, but in general the diagnostic infrastructure is supposed to be
useable from plugins. It may happen that some features don't work
currently, but I don't see a reason why we would not want to add/expose
missing functionality in case the need arises.

Best,
Tobias