[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