kikairoya wrote:

> Why does the non-Windows case not set visibility for the definition?

This is the existing behavior. 
https://github.com/llvm/llvm-project/commit/b735c66da9c9ae752b88941d466895a0b696c75e


> This changes semantics meaningfully: the template is no longer external and 
> thus will be instantiated everywhere and require COMDAT semantics. Is this 
> intentional?

For `Registry<T>` itself, yes. To catch a missing explicit instantiation 
declaration, we need to hide the definition, or to avoid requirement of the 
declaration, i.e., instantiate implicitly.


> Does it have measured perf implications that we should consider?

I haven't measured, however, accessing `Registry<T>` shouldn't be in a 
hot-path, so I think there is no major impact.
For build-time, `Registry<T>` itself is a quite simple template, and I don't 
think so many TUs instantiate it with the same parameters, so I guess it's not 
significant.

https://github.com/llvm/llvm-project/pull/185141
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to