Index: lib/Basic/Targets/WebAssembly.h =================================================================== --- lib/Basic/Targets/WebAssembly.h +++ lib/Basic/Targets/WebAssembly.h @@ -41,9 +41,11 @@ SigAtomicType = SignedLong; LongDoubleWidth = LongDoubleAlign = 128; LongDoubleFormat = &llvm::APFloat::IEEEquad(); - SizeType = UnsignedInt; - PtrDiffType = SignedInt; - IntPtrType = SignedInt; + // size_t being unsigned long for both wasm32 and wasm64 makes mangled names + // more consistent between the two. + SizeType = UnsignedLong; + PtrDiffType = SignedLong; + IntPtrType = SignedLong; } protected: @@ -111,6 +113,13 @@ explicit WebAssembly32TargetInfo(const llvm::Triple &T, const TargetOptions &Opts) : WebAssemblyTargetInfo(T, Opts) { + if (T.isOSBinFormatELF()) { + // Make size_t unsigned int, for compatibility with the asm.js + // ecosystem, including Emscripten symbols files. + SizeType = UnsignedInt; + PtrDiffType = SignedInt; + IntPtrType = SignedInt; + } MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64; resetDataLayout("e-m:e-p:32:32-i64:64-n32:64-S128"); } @@ -129,9 +138,6 @@ LongAlign = LongWidth = 64; PointerAlign = PointerWidth = 64; MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64; - SizeType = UnsignedLong; - PtrDiffType = SignedLong; - IntPtrType = SignedLong; resetDataLayout("e-m:e-p:64:64-i64:64-n32:64-S128"); } Index: test/Preprocessor/init.c =================================================================== --- test/Preprocessor/init.c +++ test/Preprocessor/init.c @@ -9053,7 +9053,32 @@ // XCORE:#define __LITTLE_ENDIAN__ 1 // XCORE:#define __XS1B__ 1 // -// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown \ +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown-elf \ +// RUN: < /dev/null \ +// RUN: | FileCheck -match-full-lines -check-prefix=WEBASSEMBLYELF32 %s +// +// WEBASSEMBLYELF32:#define __INTPTR_FMTd__ "d" +// WEBASSEMBLYELF32:#define __INTPTR_FMTi__ "i" +// WEBASSEMBLYELF32:#define __INTPTR_MAX__ 2147483647 +// WEBASSEMBLYELF32:#define __INTPTR_TYPE__ int +// WEBASSEMBLYELF32:#define __PTRDIFF_FMTd__ "d" +// WEBASSEMBLYELF32:#define __PTRDIFF_FMTi__ "i" +// WEBASSEMBLYELF32:#define __PTRDIFF_MAX__ 2147483647 +// WEBASSEMBLYELF32:#define __PTRDIFF_TYPE__ int +// WEBASSEMBLYELF32:#define __SIZE_FMTX__ "X" +// WEBASSEMBLYELF32:#define __SIZE_FMTo__ "o" +// WEBASSEMBLYELF32:#define __SIZE_FMTu__ "u" +// WEBASSEMBLYELF32:#define __SIZE_FMTx__ "x" +// WEBASSEMBLYELF32:#define __SIZE_MAX__ 4294967295U +// WEBASSEMBLYELF32:#define __SIZE_TYPE__ unsigned int +// WEBASSEMBLYELF32:#define __UINTPTR_FMTX__ "X" +// WEBASSEMBLYELF32:#define __UINTPTR_FMTo__ "o" +// WEBASSEMBLYELF32:#define __UINTPTR_FMTu__ "u" +// WEBASSEMBLYELF32:#define __UINTPTR_FMTx__ "x" +// WEBASSEMBLYELF32:#define __UINTPTR_MAX__ 4294967295U +// WEBASSEMBLYELF32:#define __UINTPTR_TYPE__ unsigned int +// +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-unknown-wasm \ // RUN: < /dev/null \ // RUN: | FileCheck -match-full-lines -check-prefix=WEBASSEMBLY32 %s // @@ -9158,10 +9183,10 @@ // WEBASSEMBLY32-NEXT:#define __INTMAX_MAX__ 9223372036854775807LL // WEBASSEMBLY32-NEXT:#define __INTMAX_TYPE__ long long int // WEBASSEMBLY32-NEXT:#define __INTMAX_WIDTH__ 64 -// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTd__ "d" -// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTi__ "i" -// WEBASSEMBLY32-NEXT:#define __INTPTR_MAX__ 2147483647 -// WEBASSEMBLY32-NEXT:#define __INTPTR_TYPE__ int +// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTd__ "ld" +// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTi__ "li" +// WEBASSEMBLY32-NEXT:#define __INTPTR_MAX__ 2147483647L +// WEBASSEMBLY32-NEXT:#define __INTPTR_TYPE__ long int // WEBASSEMBLY32-NEXT:#define __INTPTR_WIDTH__ 32 // WEBASSEMBLY32-NEXT:#define __INT_FAST16_FMTd__ "hd" // WEBASSEMBLY32-NEXT:#define __INT_FAST16_FMTi__ "hi" @@ -9226,10 +9251,10 @@ // WEBASSEMBLY32-NEXT:#define __ORDER_PDP_ENDIAN__ 3412 // WEBASSEMBLY32-NEXT:#define __POINTER_WIDTH__ 32 // WEBASSEMBLY32-NEXT:#define __PRAGMA_REDEFINE_EXTNAME 1 -// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTd__ "d" -// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTi__ "i" -// WEBASSEMBLY32-NEXT:#define __PTRDIFF_MAX__ 2147483647 -// WEBASSEMBLY32-NEXT:#define __PTRDIFF_TYPE__ int +// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTd__ "ld" +// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTi__ "li" +// WEBASSEMBLY32-NEXT:#define __PTRDIFF_MAX__ 2147483647L +// WEBASSEMBLY32-NEXT:#define __PTRDIFF_TYPE__ long int // WEBASSEMBLY32-NEXT:#define __PTRDIFF_WIDTH__ 32 // WEBASSEMBLY32-NOT:#define __REGISTER_PREFIX__ // WEBASSEMBLY32-NEXT:#define __SCHAR_MAX__ 127 @@ -9249,12 +9274,12 @@ // WEBASSEMBLY32-NEXT:#define __SIZEOF_SIZE_T__ 4 // WEBASSEMBLY32-NEXT:#define __SIZEOF_WCHAR_T__ 4 // WEBASSEMBLY32-NEXT:#define __SIZEOF_WINT_T__ 4 -// WEBASSEMBLY32-NEXT:#define __SIZE_FMTX__ "X" -// WEBASSEMBLY32-NEXT:#define __SIZE_FMTo__ "o" -// WEBASSEMBLY32-NEXT:#define __SIZE_FMTu__ "u" -// WEBASSEMBLY32-NEXT:#define __SIZE_FMTx__ "x" -// WEBASSEMBLY32-NEXT:#define __SIZE_MAX__ 4294967295U -// WEBASSEMBLY32-NEXT:#define __SIZE_TYPE__ unsigned int +// WEBASSEMBLY32-NEXT:#define __SIZE_FMTX__ "lX" +// WEBASSEMBLY32-NEXT:#define __SIZE_FMTo__ "lo" +// WEBASSEMBLY32-NEXT:#define __SIZE_FMTu__ "lu" +// WEBASSEMBLY32-NEXT:#define __SIZE_FMTx__ "lx" +// WEBASSEMBLY32-NEXT:#define __SIZE_MAX__ 4294967295UL +// WEBASSEMBLY32-NEXT:#define __SIZE_TYPE__ long unsigned int // WEBASSEMBLY32-NEXT:#define __SIZE_WIDTH__ 32 // WEBASSEMBLY32-NEXT:#define __STDC_HOSTED__ 0 // WEBASSEMBLY32-NOT:#define __STDC_MB_MIGHT_NEQ_WC__ @@ -9302,12 +9327,12 @@ // WEBASSEMBLY32-NEXT:#define __UINTMAX_MAX__ 18446744073709551615ULL // WEBASSEMBLY32-NEXT:#define __UINTMAX_TYPE__ long long unsigned int // WEBASSEMBLY32-NEXT:#define __UINTMAX_WIDTH__ 64 -// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTX__ "X" -// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTo__ "o" -// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTu__ "u" -// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTx__ "x" -// WEBASSEMBLY32-NEXT:#define __UINTPTR_MAX__ 4294967295U -// WEBASSEMBLY32-NEXT:#define __UINTPTR_TYPE__ unsigned int +// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTX__ "lX" +// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTo__ "lo" +// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTu__ "lu" +// WEBASSEMBLY32-NEXT:#define __UINTPTR_FMTx__ "lx" +// WEBASSEMBLY32-NEXT:#define __UINTPTR_MAX__ 4294967295UL +// WEBASSEMBLY32-NEXT:#define __UINTPTR_TYPE__ long unsigned int // WEBASSEMBLY32-NEXT:#define __UINTPTR_WIDTH__ 32 // WEBASSEMBLY32-NEXT:#define __UINT_FAST16_FMTX__ "hX" // WEBASSEMBLY32-NEXT:#define __UINT_FAST16_FMTo__ "ho" @@ -9384,7 +9409,7 @@ // WEBASSEMBLY32-NOT:#define __wasm64__ // WEBASSEMBLY32-NEXT:#define __wasm__ 1 // -// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm64-unknown-unknown \ +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm64-unknown-unknown-wasm \ // RUN: < /dev/null \ // RUN: | FileCheck -match-full-lines -check-prefix=WEBASSEMBLY64 %s //