Skip to content

Commit

Permalink
[WebAssembly] Change wasm SizeType to match asmjs
Browse files Browse the repository at this point in the history
Summary:
We want wasm and asmjs to have matching ABIs, and right now asmjs uses
unsigned int for its size_t. This causes exported symbols in libcxx to
not match and can cause weird breakage where libcxx doesn't get linked
as a result.  Long-term we probably want wasm32, wasm64, and asmjs to
all use unsigned long, but that would cause unnecessary ABI churn for
asmjs so defer that until we can make all the ABI changes at once.

Patch by Jacob Gravelle

Differential Revision: https://reviews.llvm.org/D24134

llvm-svn: 280420
  • Loading branch information
dschuff committed Sep 1, 2016
1 parent 6747352 commit acdc8e6
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 20 deletions.
6 changes: 6 additions & 0 deletions clang/lib/Basic/Targets.cpp
Expand Up @@ -7840,6 +7840,9 @@ class WebAssemblyTargetInfo : public TargetInfo {
SigAtomicType = SignedLong;
LongDoubleWidth = LongDoubleAlign = 128;
LongDoubleFormat = &llvm::APFloat::IEEEquad;
SizeType = UnsignedInt;
PtrDiffType = SignedInt;
IntPtrType = SignedInt;
}

protected:
Expand Down Expand Up @@ -7958,6 +7961,9 @@ class WebAssembly64TargetInfo : public WebAssemblyTargetInfo {
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");
}

Expand Down
40 changes: 20 additions & 20 deletions clang/test/Preprocessor/init.c
Expand Up @@ -8560,10 +8560,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__ "ld"
// WEBASSEMBLY32-NEXT:#define __INTPTR_FMTi__ "li"
// WEBASSEMBLY32-NEXT:#define __INTPTR_MAX__ 2147483647L
// WEBASSEMBLY32-NEXT:#define __INTPTR_TYPE__ long int
// 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_WIDTH__ 32
// WEBASSEMBLY32-NEXT:#define __INT_FAST16_FMTd__ "hd"
// WEBASSEMBLY32-NEXT:#define __INT_FAST16_FMTi__ "hi"
Expand Down Expand Up @@ -8622,10 +8622,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__ "ld"
// WEBASSEMBLY32-NEXT:#define __PTRDIFF_FMTi__ "li"
// WEBASSEMBLY32-NEXT:#define __PTRDIFF_MAX__ 2147483647L
// WEBASSEMBLY32-NEXT:#define __PTRDIFF_TYPE__ long int
// 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_WIDTH__ 32
// WEBASSEMBLY32-NOT:#define __REGISTER_PREFIX__
// WEBASSEMBLY32-NEXT:#define __SCHAR_MAX__ 127
Expand All @@ -8645,12 +8645,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__ "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_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_WIDTH__ 32
// WEBASSEMBLY32-NEXT:#define __STDC_HOSTED__ 0
// WEBASSEMBLY32-NOT:#define __STDC_MB_MIGHT_NEQ_WC__
Expand Down Expand Up @@ -8698,12 +8698,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__ "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_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_WIDTH__ 32
// WEBASSEMBLY32-NEXT:#define __UINT_FAST16_FMTX__ "hX"
// WEBASSEMBLY32-NEXT:#define __UINT_FAST16_FMTo__ "ho"
Expand Down

0 comments on commit acdc8e6

Please sign in to comment.