================ @@ -154,4 +154,89 @@ namespace GlobalTest { }; inline float Test::disallowedStaticMember2 = 2.3; // hidden-warning {{'disallowedStaticMember2' may be duplicated when built into a shared library: it is mutable, has hidden visibility, and external linkage}} -} // namespace GlobalTest \ No newline at end of file +} // namespace GlobalTest + +/****************************************************************************** + * Case three: Inside templates + ******************************************************************************/ + +namespace TemplateTest { + +template <typename T> +int disallowedTemplate1 = 0; // hidden-warning {{'disallowedTemplate1<int>' may be duplicated when built into a shared library: it is mutable, has hidden visibility, and external linkage}} + +template int disallowedTemplate1<int>; // hidden-note {{in instantiation of}} + + +// Should work for implicit instantiation as well +template <typename T> +int disallowedTemplate2 = 0; // hidden-warning {{'disallowedTemplate2<int>' may be duplicated when built into a shared library: it is mutable, has hidden visibility, and external linkage}} + +int implicit_instantiate() { + return disallowedTemplate2<int>; // hidden-note {{in instantiation of}} +} + + +// Ensure we only get warnings for templates that are actually instantiated +template <typename T> +int maybeAllowedTemplate = 0; // Not instantiated, so no warning here + +template <typename T> +int maybeAllowedTemplate<T*> = 1; // hidden-warning {{'maybeAllowedTemplate<int *>' may be duplicated when built into a shared library: it is mutable, has hidden visibility, and external linkage}} + +template <> +int maybeAllowedTemplate<bool> = 2; // hidden-warning {{'maybeAllowedTemplate<bool>' may be duplicated when built into a shared library: it is mutable, has hidden visibility, and external linkage}} + +template int maybeAllowedTemplate<int*>; // hidden-note {{in instantiation of}} + + + +// Should work the same for static class members +template <class T> ---------------- zmodem wrote:
ultra nit: for the template parameter you used `typename` above and `class` here. It doesn't really matter, but I'd pick one throughout for consistency. https://github.com/llvm/llvm-project/pull/125902 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits