[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.
+#define LLVM_ABI __attribute__((visibility("default")))
+#if defined(__GNUC__) && !defined(__clang__)
+// GCC produces warnings on visibility attributes applied to some templates.
+#define LLVM_TEMPLATE_ABI
+#else
+#define LLVM_TEMPLATE_ABI __attribute__((visibility("default")))
+#endif
+#define LLVM_EXPORT_TEMPLATE
+#define LLVM_ABI_EXPORT __attribute__((visibility("default")))
+#elif (defined(__MACH__) || defined(__WASM__) || defined(__EMSCRIPTEN__)) && \
+ __has_attribute(visibility)
+#define LLVM_ABI __attribute__((visibility("default")))
+#define LLVM_TEMPLATE_ABI
#define LLVM_EXPORT_TEMPLATE
-#define LLVM_ABI_EXPORT LLVM_ATTRIBUTE_VISIBILITY_DEFAULT
-#elif defined(__MACH__) || defined(__WASM__) || defined(__EMSCRIPTEN__)
-#define LLVM_ABI LLVM_ATTRIBUTE_VISIBILITY_DEFAULT
+#define LLVM_ABI_EXPORT __attribute__((visibility("default")))
+#else
----------------
compnerd wrote:
This block seems like a pretty complicated way to say:
```c
#if !defined(_WIN32)
# if __has_attribute(__visibility)
# define LLVM_ABI __attribute__((__visibility__("default")))
# define LLVM_ABI_EXPORT __attribute__((__visibility__("default")))
# if defined(__clang__)
# define LLVM_TEMPLATE_ABI __attribute__((__visibility__("default")))
# else
# define LLVM_TEMPLATE_ABI
# endif
# endif
#else
```
https://github.com/llvm/llvm-project/pull/135995
More information about the llvm-commits
mailing list