[flang-commits] [flang] [flang] Predefine __wasm* macros from the target triple (PR #226470)
via flang-commits
flang-commits at lists.llvm.org
Fri Sep 25 05:46:48 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-driver
Author: Anutosh Bhat (anutosh491)
<details>
<summary>Changes</summary>
This defines the Clang-compatible `__wasm*` architecture macros from Flang's target triple.
Both wasm32 and wasm64 are covered, including the supported macro spellings and checks that the architecture-specific definitions remain mutually exclusive.
This is another small step towards using Flang as a WebAssembly cross-compiler. The implementation is based on Isabel Paredes' emscripten-forge patch.
---
Full diff: https://github.com/llvm/llvm-project/pull/226470.diff
2 Files Affected:
- (modified) flang/lib/Frontend/CompilerInvocation.cpp (+13)
- (added) flang/test/Driver/predefined-macros-wasm.f90 (+34)
``````````diff
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 1f9be77057fb05..d123f198b23806 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -2043,6 +2043,19 @@ void CompilerInvocation::setDefaultPredefinitions() {
fortranOptions.predefinitions.emplace_back("__s390x__", "1");
fortranOptions.predefinitions.emplace_back("__s390x", "1");
break;
+ case llvm::Triple::ArchType::wasm32:
+ // Match Clang's WebAssembly target defines.
+ fortranOptions.predefinitions.emplace_back("__wasm__", "1");
+ fortranOptions.predefinitions.emplace_back("__wasm", "1");
+ fortranOptions.predefinitions.emplace_back("__wasm32__", "1");
+ fortranOptions.predefinitions.emplace_back("__wasm32", "1");
+ break;
+ case llvm::Triple::ArchType::wasm64:
+ fortranOptions.predefinitions.emplace_back("__wasm__", "1");
+ fortranOptions.predefinitions.emplace_back("__wasm", "1");
+ fortranOptions.predefinitions.emplace_back("__wasm64__", "1");
+ fortranOptions.predefinitions.emplace_back("__wasm64", "1");
+ break;
}
}
diff --git a/flang/test/Driver/predefined-macros-wasm.f90 b/flang/test/Driver/predefined-macros-wasm.f90
new file mode 100644
index 00000000000000..b032aee0dd5cdb
--- /dev/null
+++ b/flang/test/Driver/predefined-macros-wasm.f90
@@ -0,0 +1,34 @@
+! Test predefined macros for WebAssembly architectures.
+! REQUIRES: webassembly-registered-target
+
+! RUN: %flang_fc1 -triple wasm32-unknown-emscripten -cpp -E %s | FileCheck %s --check-prefixes=COMMON,WASM32
+! RUN: %flang_fc1 -triple wasm64-unknown-emscripten -cpp -E %s | FileCheck %s --check-prefixes=COMMON,WASM64
+
+! COMMON: integer :: wasm = 1
+! COMMON: integer :: wasm_underscores = 1
+! WASM32: integer :: wasm32 = 1
+! WASM32: integer :: wasm32_underscores = 1
+! WASM32-NOT: integer :: wasm64
+! WASM64: integer :: wasm64 = 1
+! WASM64: integer :: wasm64_underscores = 1
+! WASM64-NOT: integer :: wasm32
+
+#if __wasm
+ integer :: wasm = __wasm
+#endif
+#if __wasm__
+ integer :: wasm_underscores = __wasm__
+#endif
+#if __wasm32
+ integer :: wasm32 = __wasm32
+#endif
+#if __wasm32__
+ integer :: wasm32_underscores = __wasm32__
+#endif
+#if __wasm64
+ integer :: wasm64 = __wasm64
+#endif
+#if __wasm64__
+ integer :: wasm64_underscores = __wasm64__
+#endif
+end program
``````````
</details>
https://github.com/llvm/llvm-project/pull/226470
More information about the flang-commits
mailing list