[llvm] [llvm] revisions to export annotation macros to avoid compiler warnings (PR #135995)

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 16 15:13:55 PDT 2025


================
@@ -197,17 +197,32 @@
 #define LLVM_EXPORT_TEMPLATE
 #endif
 #define LLVM_ABI_EXPORT __declspec(dllexport)
-#elif defined(__ELF__) || defined(__MINGW32__) || defined(_AIX) ||             \
-    defined(__MVS__)
-#define LLVM_ABI LLVM_ATTRIBUTE_VISIBILITY_DEFAULT
-#define LLVM_TEMPLATE_ABI LLVM_ATTRIBUTE_VISIBILITY_DEFAULT
+#elif (defined(__ELF__) || defined(__MINGW32__) || defined(_AIX) ||            \
+       defined(__MVS__)) &&                                                    \
+    __has_attribute(visibililty)
+// Use __attribute__((visibility(""))) syntax for visibility rather than
+// [[gnu::visibility("")]] because compilers are more permissive with its
+// placement.
----------------
compnerd wrote:

This is not a compilers thing IMO. This is because the C++ generalised attributes have stricter positioning requirements. The GNU attribute parsing is far more complicated due to the long history and its organic growth. That is to say, I think that this is a property of the attribute spelling itself.

https://github.com/llvm/llvm-project/pull/135995


More information about the llvm-commits mailing list