erichkeane wrote:

> @erichkeane thanks a lot for the clarification. I think I have a hang of it 
> now- I was kinda confused before. Now, my approach is to look through 
> DiagnosticXKinds.td files -> check for a `select` with a significant number 
> of items -> check its diagnostic ID -> grep the lib directory with this ID 
> and find the uses of the diagnostic -> see if it’s up for replacement (caller 
> has a lot of magic numbers/an enum made just for it).
>

Yeah, that seems like a good strategy.

> Now I wanted to ask - what do you consider a lot - 3 or more uses with magic 
> numbers?

I don't have a 'hard' number here.  When I was looking for a few to demo it 
with, I just found ones where it was 'most' or 'all' uses.

> 
> For a `select` with a significant number of items, I’m thinking of going with 
> 4 or more items as it seems reasonable. I was also looking through the 
> codebase using this heuristic exposed a lot more for replacement (rather than 
> 5 which I had in mind before).
> 

Another time I don't have a 'hard' number.  It is a bit of a balance between 'a 
lot of work' and 'transform enough of the uses that it improves readability'.  
If 4 gives a good number of candidates, that is probably a good place to start.

> Also could you just brief me through the process of a change. I know the .td 
> files are used to generate header files. So do I have to change the select to 
> an enum_select first in the .td files and then build and then reference the 
> generated enum option in the caller (e.g. diag::MemClassWork::AliasDecl) and 
> then rebuild.

Yes, this would be the first/second step.

> The thing about this is that the build would probably fail the first time as 
> the callers will still make use of the magic numbers. 

Magic numbers will still compile and work.  The version of `Diag`'s operator 
`<<` that this calls is still the one that takes an integral value.  So adding 
`enum_select` to something, as long as you don't change the order/number of 
elements, shouldn't break anything.

>I also found an enum declared just for a select that was already in a header 
>file. For this case, I just remove this declaration right? And then replace 
>the select. I guess I’m just confused about the whole header generation 
>process - where the new enums would live since the relevant header files 
>already exist before a build (e.g Sema.h, Decl.h) and since we’re making 
>changes to .td files which are the header generators. Kinda new to clang stuff 
>so forgive me for these questions 😅

Yes, you'd want to remove the old ones.  Tablegen will create the enums in the 
file `ClangDiagnostic${component}Enums.inc` I think, so search your build 
directory and you'll see where those are.


https://github.com/llvm/llvm-project/pull/130868
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to