[clang] Using type deduction to define __SIZE_TYPE__ and __PTRDIFF_TYPE__ (PR #155979)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 28 23:04:22 PDT 2025
https://github.com/YexuanXiao created https://github.com/llvm/llvm-project/pull/155979
Previously, I made the `sizeof` expression return the `__size_t` type instead of `unsigned int`/`long`/`long long` (#143653). However, the types of the predefined macros `__SIZE_TYPE__` and `__PTRDIFF_TYPE__` obtained from `TargetInfo` are still `unsigned` `int`/`long`/`long long`. This causes the common sugar type for evaluating `size_t(0)` and `sizeof(0)` to be `unsigned` `int`/`long`/`long long` instead of `__size_t` when using glibc/llvm-libc/libc++.
>From da3d78ad13eb53fa46f711cb295c60d9a6cebbab Mon Sep 17 00:00:00 2001
From: YexuanXiao <bizwen at nykz.org>
Date: Fri, 29 Aug 2025 13:46:55 +0800
Subject: [PATCH] Using type deduction to define __SIZE_TYPE__ and
__PTRDIFF_TYPE__
---
clang/lib/Frontend/InitPreprocessor.cpp | 10 ++-
clang/test/Preprocessor/init-aarch64.c | 14 ++--
clang/test/Preprocessor/init-arm.c | 32 ++++----
clang/test/Preprocessor/init-csky.c | 4 +-
clang/test/Preprocessor/init-loongarch.c | 8 +-
clang/test/Preprocessor/init-mips.c | 24 +++---
clang/test/Preprocessor/init-ppc.c | 16 ++--
clang/test/Preprocessor/init-ppc64.c | 16 ++--
clang/test/Preprocessor/init-s390x.c | 4 +-
clang/test/Preprocessor/init-v7k-compat.c | 4 +-
clang/test/Preprocessor/init-ve.c | 4 +-
clang/test/Preprocessor/init-x86.c | 36 ++++-----
clang/test/Preprocessor/init.c | 92 +++++++++++------------
clang/test/Preprocessor/woa-defaults.c | 4 +-
clang/test/Sema/warn-bad-function-cast.c | 7 +-
15 files changed, 140 insertions(+), 135 deletions(-)
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 4865c0b889044..5183afe6618b9 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -1175,13 +1175,15 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("__UINTMAX_C_SUFFIX__", ConstSuffix);
Builder.defineMacro("__UINTMAX_C(c)",
ConstSuffix.size() ? Twine("c##") + ConstSuffix : "c");
- DefineType("__PTRDIFF_TYPE__", TI.getPtrDiffType(LangAS::Default), Builder);
- DefineFmt(LangOpts, "__PTRDIFF", TI.getPtrDiffType(LangAS::Default), TI,
- Builder);
DefineType("__INTPTR_TYPE__", TI.getIntPtrType(), Builder);
DefineFmt(LangOpts, "__INTPTR", TI.getIntPtrType(), TI, Builder);
- DefineType("__SIZE_TYPE__", TI.getSizeType(), Builder);
+ // Use deduction to obtain the built-in __size_t and __ptrdiff_t types instead
+ // of standard integer types
+ Builder.defineMacro("__SIZE_TYPE__", "__typeof(sizeof(0))");
DefineFmt(LangOpts, "__SIZE", TI.getSizeType(), TI, Builder);
+ Builder.defineMacro("__PTRDIFF_TYPE__", "__typeof((int*)0-(int*)0)");
+ DefineFmt(LangOpts, "__PTRDIFF", TI.getPtrDiffType(LangAS::Default), TI,
+ Builder);
DefineType("__WCHAR_TYPE__", TI.getWCharType(), Builder);
DefineType("__WINT_TYPE__", TI.getWIntType(), Builder);
DefineTypeSizeAndWidth("__SIG_ATOMIC", TI.getSigAtomicType(), TI, Builder);
diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c
index 3036b496db25d..91e1e502e5256 100644
--- a/clang/test/Preprocessor/init-aarch64.c
+++ b/clang/test/Preprocessor/init-aarch64.c
@@ -255,7 +255,7 @@
// AARCH64-NEXT: #define __PTRDIFF_FMTd__ "ld"
// AARCH64-NEXT: #define __PTRDIFF_FMTi__ "li"
// AARCH64-NEXT: #define __PTRDIFF_MAX__ 9223372036854775807L
-// AARCH64-NEXT: #define __PTRDIFF_TYPE__ long int
+// AARCH64-NEXT: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// AARCH64-NEXT: #define __PTRDIFF_WIDTH__ 64
// AARCH64-NEXT: #define __SCHAR_MAX__ 127
// AARCH64-NEXT: #define __SHRT_MAX__ 32767
@@ -280,7 +280,7 @@
// AARCH64-NEXT: #define __SIZE_FMTu__ "lu"
// AARCH64-NEXT: #define __SIZE_FMTx__ "lx"
// AARCH64-NEXT: #define __SIZE_MAX__ 18446744073709551615UL
-// AARCH64-NEXT: #define __SIZE_TYPE__ long unsigned int
+// AARCH64-NEXT: #define __SIZE_TYPE__ __typeof(sizeof(0))
// AARCH64-NEXT: #define __SIZE_WIDTH__ 64
// AARCH64_CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
// AARCH64_CXX: #define __STDCPP_THREADS__ 1
@@ -531,7 +531,7 @@
// AARCH64-DARWIN: #define __LONG_MAX__ 9223372036854775807L
// AARCH64-DARWIN: #define __LP64__ 1
// AARCH64-DARWIN: #define __POINTER_WIDTH__ 64
-// AARCH64-DARWIN: #define __PTRDIFF_TYPE__ long int
+// AARCH64-DARWIN: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// AARCH64-DARWIN: #define __PTRDIFF_WIDTH__ 64
// AARCH64-DARWIN: #define __SCHAR_MAX__ 127
// AARCH64-DARWIN: #define __SHRT_MAX__ 32767
@@ -551,7 +551,7 @@
// AARCH64-DARWIN: #define __SIZEOF_WCHAR_T__ 4
// AARCH64-DARWIN: #define __SIZEOF_WINT_T__ 4
// AARCH64-DARWIN: #define __SIZE_MAX__ 18446744073709551615UL
-// AARCH64-DARWIN: #define __SIZE_TYPE__ long unsigned int
+// AARCH64-DARWIN: #define __SIZE_TYPE__ __typeof(sizeof(0))
// AARCH64-DARWIN: #define __SIZE_WIDTH__ 64
// AARCH64-DARWIN: #define __UINT16_C(c) c
// AARCH64-DARWIN: #define __UINT16_C_SUFFIX__
@@ -716,7 +716,7 @@
// AARCH64-MSVC: #define __SIZEOF_WCHAR_T__ 2
// AARCH64-MSVC: #define __SIZEOF_WINT_T__ 2
// AARCH64-MSVC: #define __SIZE_MAX__ 18446744073709551615ULL
-// AARCH64-MSVC: #define __SIZE_TYPE__ long long unsigned int
+// AARCH64-MSVC: #define __SIZE_TYPE__ __typeof(sizeof(0))
// AARCH64-MSVC: #define __SIZE_WIDTH__ 64
// AARCH64-MSVC: #define __STDC_HOSTED__ 0
// AARCH64-MSVC: #define __STDC_UTF_16__ 1
@@ -1010,7 +1010,7 @@
// ARM64EC-MSVC: #define __PTRDIFF_FMTd__ "lld"
// ARM64EC-MSVC: #define __PTRDIFF_FMTi__ "lli"
// ARM64EC-MSVC: #define __PTRDIFF_MAX__ 9223372036854775807LL
-// ARM64EC-MSVC: #define __PTRDIFF_TYPE__ long long int
+// ARM64EC-MSVC: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARM64EC-MSVC: #define __PTRDIFF_WIDTH__ 64
// ARM64EC-MSVC: #define __SCHAR_MAX__ 127
// ARM64EC-MSVC: #define __SHRT_MAX__ 32767
@@ -1035,7 +1035,7 @@
// ARM64EC-MSVC: #define __SIZE_FMTu__ "llu"
// ARM64EC-MSVC: #define __SIZE_FMTx__ "llx"
// ARM64EC-MSVC: #define __SIZE_MAX__ 18446744073709551615ULL
-// ARM64EC-MSVC: #define __SIZE_TYPE__ long long unsigned int
+// ARM64EC-MSVC: #define __SIZE_TYPE__ __typeof(sizeof(0))
// ARM64EC-MSVC: #define __SIZE_WIDTH__ 64
// ARM64EC-MSVC: #define __STDC_HOSTED__ 0
// ARM64EC-MSVC: #define __STDC_NO_THREADS__ 1
diff --git a/clang/test/Preprocessor/init-arm.c b/clang/test/Preprocessor/init-arm.c
index d2fcfe94bcd3d..50b199a38cbb0 100644
--- a/clang/test/Preprocessor/init-arm.c
+++ b/clang/test/Preprocessor/init-arm.c
@@ -133,7 +133,7 @@
// ARM:#define __LONG_MAX__ 2147483647L
// ARM-NOT:#define __LP64__
// ARM:#define __POINTER_WIDTH__ 32
-// ARM:#define __PTRDIFF_TYPE__ int
+// ARM:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARM:#define __PTRDIFF_WIDTH__ 32
// ARM:#define __REGISTER_PREFIX__
// ARM:#define __SCHAR_MAX__ 127
@@ -153,7 +153,7 @@
// ARM:#define __SIZEOF_WCHAR_T__ 4
// ARM:#define __SIZEOF_WINT_T__ 4
// ARM:#define __SIZE_MAX__ 4294967295U
-// ARM:#define __SIZE_TYPE__ unsigned int
+// ARM:#define __SIZE_TYPE__ __typeof(sizeof(0))
// ARM:#define __SIZE_WIDTH__ 32
// ARM-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
// ARM:#define __UINT16_C(c) c
@@ -213,8 +213,8 @@
// RUN: %clang_cc1 -dM -ffreestanding -triple arm-none-none -target-abi apcs-gnu -E /dev/null -o - | FileCheck -match-full-lines -check-prefix ARM-APCS-GNU %s
// ARM-APCS-GNU: #define __INTPTR_TYPE__ int
-// ARM-APCS-GNU: #define __PTRDIFF_TYPE__ int
-// ARM-APCS-GNU: #define __SIZE_TYPE__ unsigned int
+// ARM-APCS-GNU: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// ARM-APCS-GNU: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RUN: %clang_cc1 -E -dM -ffreestanding -triple=armeb-none-none < /dev/null | FileCheck -match-full-lines -check-prefix ARM-BE %s
//
@@ -344,7 +344,7 @@
// ARM-BE:#define __LONG_MAX__ 2147483647L
// ARM-BE-NOT:#define __LP64__
// ARM-BE:#define __POINTER_WIDTH__ 32
-// ARM-BE:#define __PTRDIFF_TYPE__ int
+// ARM-BE:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARM-BE:#define __PTRDIFF_WIDTH__ 32
// ARM-BE:#define __REGISTER_PREFIX__
// ARM-BE:#define __SCHAR_MAX__ 127
@@ -364,7 +364,7 @@
// ARM-BE:#define __SIZEOF_WCHAR_T__ 4
// ARM-BE:#define __SIZEOF_WINT_T__ 4
// ARM-BE:#define __SIZE_MAX__ 4294967295U
-// ARM-BE:#define __SIZE_TYPE__ unsigned int
+// ARM-BE:#define __SIZE_TYPE__ __typeof(sizeof(0))
// ARM-BE:#define __SIZE_WIDTH__ 32
// ARM-BE:#define __UINT16_C(c) c
// ARM-BE:#define __UINT16_C_SUFFIX__
@@ -547,7 +547,7 @@
// ARMEABISOFT:#define __LONG_MAX__ 2147483647L
// ARMEABISOFT-NOT:#define __LP64__
// ARMEABISOFT:#define __POINTER_WIDTH__ 32
-// ARMEABISOFT:#define __PTRDIFF_TYPE__ int
+// ARMEABISOFT:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARMEABISOFT:#define __PTRDIFF_WIDTH__ 32
// ARMEABISOFT:#define __REGISTER_PREFIX__
// ARMEABISOFT:#define __SCHAR_MAX__ 127
@@ -567,7 +567,7 @@
// ARMEABISOFT:#define __SIZEOF_WCHAR_T__ 4
// ARMEABISOFT:#define __SIZEOF_WINT_T__ 4
// ARMEABISOFT:#define __SIZE_MAX__ 4294967295U
-// ARMEABISOFT:#define __SIZE_TYPE__ unsigned int
+// ARMEABISOFT:#define __SIZE_TYPE__ __typeof(sizeof(0))
// ARMEABISOFT:#define __SIZE_WIDTH__ 32
// ARMEABISOFT:#define __SOFTFP__ 1
// ARMEABISOFT:#define __UINT16_C(c) c
@@ -757,7 +757,7 @@
// ARMEABISOFTFP_NOFP:#define __LONG_MAX__ 2147483647L
// ARMEABISOFTFP_NOFP-NOT:#define __LP64__
// ARMEABISOFTFP_NOFP:#define __POINTER_WIDTH__ 32
-// ARMEABISOFTFP_NOFP:#define __PTRDIFF_TYPE__ int
+// ARMEABISOFTFP_NOFP:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARMEABISOFTFP_NOFP:#define __PTRDIFF_WIDTH__ 32
// ARMEABISOFTFP_NOFP:#define __REGISTER_PREFIX__
// ARMEABISOFTFP_NOFP:#define __SCHAR_MAX__ 127
@@ -777,7 +777,7 @@
// ARMEABISOFTFP_NOFP:#define __SIZEOF_WCHAR_T__ 4
// ARMEABISOFTFP_NOFP:#define __SIZEOF_WINT_T__ 4
// ARMEABISOFTFP_NOFP:#define __SIZE_MAX__ 4294967295U
-// ARMEABISOFTFP_NOFP:#define __SIZE_TYPE__ unsigned int
+// ARMEABISOFTFP_NOFP:#define __SIZE_TYPE__ __typeof(sizeof(0))
// ARMEABISOFTFP_NOFP:#define __SIZE_WIDTH__ 32
// ARMEABISOFTFP_NOFP:#define __SOFTFP__ 1
// ARMEABISOFTFP_NOFP:#define __UINT16_C(c) c
@@ -961,7 +961,7 @@
// ARMEABISOFTFP_FP:#define __LONG_MAX__ 2147483647L
// ARMEABISOFTFP_FP-NOT:#define __LP64__
// ARMEABISOFTFP_FP:#define __POINTER_WIDTH__ 32
-// ARMEABISOFTFP_FP:#define __PTRDIFF_TYPE__ int
+// ARMEABISOFTFP_FP:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARMEABISOFTFP_FP:#define __PTRDIFF_WIDTH__ 32
// ARMEABISOFTFP_FP:#define __REGISTER_PREFIX__
// ARMEABISOFTFP_FP:#define __SCHAR_MAX__ 127
@@ -981,7 +981,7 @@
// ARMEABISOFTFP_FP:#define __SIZEOF_WCHAR_T__ 4
// ARMEABISOFTFP_FP:#define __SIZEOF_WINT_T__ 4
// ARMEABISOFTFP_FP:#define __SIZE_MAX__ 4294967295U
-// ARMEABISOFTFP_FP:#define __SIZE_TYPE__ unsigned int
+// ARMEABISOFTFP_FP:#define __SIZE_TYPE__ __typeof(sizeof(0))
// ARMEABISOFTFP_FP:#define __SIZE_WIDTH__ 32
// ARMEABISOFTFP_FP-NOT:#define __SOFTFP__ 1
// ARMEABISOFTFP_FP:#define __UINT16_C(c) c
@@ -1165,7 +1165,7 @@
// ARMEABIHARDFP:#define __LONG_MAX__ 2147483647L
// ARMEABIHARDFP-NOT:#define __LP64__
// ARMEABIHARDFP:#define __POINTER_WIDTH__ 32
-// ARMEABIHARDFP:#define __PTRDIFF_TYPE__ int
+// ARMEABIHARDFP:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARMEABIHARDFP:#define __PTRDIFF_WIDTH__ 32
// ARMEABIHARDFP:#define __REGISTER_PREFIX__
// ARMEABIHARDFP:#define __SCHAR_MAX__ 127
@@ -1185,7 +1185,7 @@
// ARMEABIHARDFP:#define __SIZEOF_WCHAR_T__ 4
// ARMEABIHARDFP:#define __SIZEOF_WINT_T__ 4
// ARMEABIHARDFP:#define __SIZE_MAX__ 4294967295U
-// ARMEABIHARDFP:#define __SIZE_TYPE__ unsigned int
+// ARMEABIHARDFP:#define __SIZE_TYPE__ __typeof(sizeof(0))
// ARMEABIHARDFP:#define __SIZE_WIDTH__ 32
// ARMEABIHARDFP-NOT:#define __SOFTFP__ 1
// ARMEABIHARDFP:#define __UINT16_C(c) c
@@ -1367,7 +1367,7 @@
// ARM-NETBSD:#define __LONG_MAX__ 2147483647L
// ARM-NETBSD-NOT:#define __LP64__
// ARM-NETBSD:#define __POINTER_WIDTH__ 32
-// ARM-NETBSD:#define __PTRDIFF_TYPE__ long int
+// ARM-NETBSD:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// ARM-NETBSD:#define __PTRDIFF_WIDTH__ 32
// ARM-NETBSD:#define __REGISTER_PREFIX__
// ARM-NETBSD:#define __SCHAR_MAX__ 127
@@ -1387,7 +1387,7 @@
// ARM-NETBSD:#define __SIZEOF_WCHAR_T__ 4
// ARM-NETBSD:#define __SIZEOF_WINT_T__ 4
// ARM-NETBSD:#define __SIZE_MAX__ 4294967295UL
-// ARM-NETBSD:#define __SIZE_TYPE__ long unsigned int
+// ARM-NETBSD:#define __SIZE_TYPE__ __typeof(sizeof(0))
// ARM-NETBSD:#define __SIZE_WIDTH__ 32
// ARM-NETBSD:#define __SOFTFP__ 1
// ARM-NETBSD:#define __UINT16_C(c) c
diff --git a/clang/test/Preprocessor/init-csky.c b/clang/test/Preprocessor/init-csky.c
index 99c5ad1010edb..da0b11e055d1e 100644
--- a/clang/test/Preprocessor/init-csky.c
+++ b/clang/test/Preprocessor/init-csky.c
@@ -130,7 +130,7 @@
// CSKY: #define __POINTER_WIDTH__ 32
// CSKY: #define __PRAGMA_REDEFINE_EXTNAME 1
// CSKY: #define __PTRDIFF_MAX__ 2147483647
-// CSKY: #define __PTRDIFF_TYPE__ int
+// CSKY: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// CSKY: #define __PTRDIFF_WIDTH__ 32
// CSKY: #define __SCHAR_MAX__ 127
// CSKY: #define __SHRT_MAX__ 32767
@@ -150,7 +150,7 @@
// CSKY: #define __SIZEOF_WCHAR_T__ 4
// CSKY: #define __SIZEOF_WINT_T__ 4
// CSKY: #define __SIZE_MAX__ 4294967295U
-// CSKY: #define __SIZE_TYPE__ unsigned int
+// CSKY: #define __SIZE_TYPE__ __typeof(sizeof(0))
// CSKY: #define __SIZE_WIDTH__ 32
// CSKY: #define __STDC_HOSTED__ 0
// CSKY: #define __STDC_UTF_16__ 1
diff --git a/clang/test/Preprocessor/init-loongarch.c b/clang/test/Preprocessor/init-loongarch.c
index 71a266b8a9157..9907a99166371 100644
--- a/clang/test/Preprocessor/init-loongarch.c
+++ b/clang/test/Preprocessor/init-loongarch.c
@@ -200,7 +200,7 @@
// LA32: #define __PTRDIFF_FMTd__ "d"
// LA32: #define __PTRDIFF_FMTi__ "i"
// LA32: #define __PTRDIFF_MAX__ 2147483647
-// LA32: #define __PTRDIFF_TYPE__ int
+// LA32: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// LA32: #define __PTRDIFF_WIDTH__ 32
// LA32: #define __SCHAR_MAX__ 127
// LA32: #define __SHRT_MAX__ 32767
@@ -225,7 +225,7 @@
// LA32: #define __SIZE_FMTu__ "u"
// LA32: #define __SIZE_FMTx__ "x"
// LA32: #define __SIZE_MAX__ 4294967295U
-// LA32: #define __SIZE_TYPE__ unsigned int
+// LA32: #define __SIZE_TYPE__ __typeof(sizeof(0))
// LA32: #define __SIZE_WIDTH__ 32
// LA32: #define __STDC_HOSTED__ 0
// LA32: #define __STDC_UTF_16__ 1
@@ -532,7 +532,7 @@
// LA64: #define __PTRDIFF_FMTd__ "ld"
// LA64: #define __PTRDIFF_FMTi__ "li"
// LA64: #define __PTRDIFF_MAX__ 9223372036854775807L
-// LA64: #define __PTRDIFF_TYPE__ long int
+// LA64: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// LA64: #define __PTRDIFF_WIDTH__ 64
// LA64: #define __SCHAR_MAX__ 127
// LA64: #define __SHRT_MAX__ 32767
@@ -557,7 +557,7 @@
// LA64: #define __SIZE_FMTu__ "lu"
// LA64: #define __SIZE_FMTx__ "lx"
// LA64: #define __SIZE_MAX__ 18446744073709551615UL
-// LA64: #define __SIZE_TYPE__ long unsigned int
+// LA64: #define __SIZE_TYPE__ __typeof(sizeof(0))
// LA64: #define __SIZE_WIDTH__ 64
// LA64: #define __STDC_HOSTED__ 0
// LA64: #define __STDC_UTF_16__ 1
diff --git a/clang/test/Preprocessor/init-mips.c b/clang/test/Preprocessor/init-mips.c
index 125872a001bac..46b25f07852f2 100644
--- a/clang/test/Preprocessor/init-mips.c
+++ b/clang/test/Preprocessor/init-mips.c
@@ -138,7 +138,7 @@
// MIPS32BE:#define __MIPSEB__ 1
// MIPS32BE:#define __POINTER_WIDTH__ 32
// MIPS32BE:#define __PRAGMA_REDEFINE_EXTNAME 1
-// MIPS32BE:#define __PTRDIFF_TYPE__ int
+// MIPS32BE:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// MIPS32BE:#define __PTRDIFF_WIDTH__ 32
// MIPS32BE:#define __REGISTER_PREFIX__
// MIPS32BE:#define __SCHAR_MAX__ 127
@@ -158,7 +158,7 @@
// MIPS32BE:#define __SIZEOF_WCHAR_T__ 4
// MIPS32BE:#define __SIZEOF_WINT_T__ 4
// MIPS32BE:#define __SIZE_MAX__ 4294967295U
-// MIPS32BE:#define __SIZE_TYPE__ unsigned int
+// MIPS32BE:#define __SIZE_TYPE__ __typeof(sizeof(0))
// MIPS32BE:#define __SIZE_WIDTH__ 32
// MIPS32BE-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
// MIPS32BE:#define __STDC_HOSTED__ 0
@@ -359,7 +359,7 @@
// MIPS32EL:#define __MIPSEL__ 1
// MIPS32EL:#define __POINTER_WIDTH__ 32
// MIPS32EL:#define __PRAGMA_REDEFINE_EXTNAME 1
-// MIPS32EL:#define __PTRDIFF_TYPE__ int
+// MIPS32EL:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// MIPS32EL:#define __PTRDIFF_WIDTH__ 32
// MIPS32EL:#define __REGISTER_PREFIX__
// MIPS32EL:#define __SCHAR_MAX__ 127
@@ -379,7 +379,7 @@
// MIPS32EL:#define __SIZEOF_WCHAR_T__ 4
// MIPS32EL:#define __SIZEOF_WINT_T__ 4
// MIPS32EL:#define __SIZE_MAX__ 4294967295U
-// MIPS32EL:#define __SIZE_TYPE__ unsigned int
+// MIPS32EL:#define __SIZE_TYPE__ __typeof(sizeof(0))
// MIPS32EL:#define __SIZE_WIDTH__ 32
// MIPS32EL:#define __UINT16_C(c) c
// MIPS32EL:#define __UINT16_C_SUFFIX__
@@ -611,7 +611,7 @@
// MIPSN32BE: #define __PTRDIFF_FMTd__ "d"
// MIPSN32BE: #define __PTRDIFF_FMTi__ "i"
// MIPSN32BE: #define __PTRDIFF_MAX__ 2147483647
-// MIPSN32BE: #define __PTRDIFF_TYPE__ int
+// MIPSN32BE: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// MIPSN32BE: #define __PTRDIFF_WIDTH__ 32
// MIPSN32BE: #define __REGISTER_PREFIX__
// MIPSN32BE: #define __SCHAR_MAX__ 127
@@ -635,7 +635,7 @@
// MIPSN32BE: #define __SIZE_FMTu__ "u"
// MIPSN32BE: #define __SIZE_FMTx__ "x"
// MIPSN32BE: #define __SIZE_MAX__ 4294967295U
-// MIPSN32BE: #define __SIZE_TYPE__ unsigned int
+// MIPSN32BE: #define __SIZE_TYPE__ __typeof(sizeof(0))
// MIPSN32BE: #define __SIZE_WIDTH__ 32
// MIPSN32BE-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16U
// MIPSN32BE: #define __STDC_HOSTED__ 0
@@ -929,7 +929,7 @@
// MIPSN32EL: #define __PTRDIFF_FMTd__ "d"
// MIPSN32EL: #define __PTRDIFF_FMTi__ "i"
// MIPSN32EL: #define __PTRDIFF_MAX__ 2147483647
-// MIPSN32EL: #define __PTRDIFF_TYPE__ int
+// MIPSN32EL: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// MIPSN32EL: #define __PTRDIFF_WIDTH__ 32
// MIPSN32EL: #define __REGISTER_PREFIX__
// MIPSN32EL: #define __SCHAR_MAX__ 127
@@ -953,7 +953,7 @@
// MIPSN32EL: #define __SIZE_FMTu__ "u"
// MIPSN32EL: #define __SIZE_FMTx__ "x"
// MIPSN32EL: #define __SIZE_MAX__ 4294967295U
-// MIPSN32EL: #define __SIZE_TYPE__ unsigned int
+// MIPSN32EL: #define __SIZE_TYPE__ __typeof(sizeof(0))
// MIPSN32EL: #define __SIZE_WIDTH__ 32
// MIPSN32EL: #define __STDC_HOSTED__ 0
// MIPSN32EL: #define __STDC_UTF_16__ 1
@@ -1215,7 +1215,7 @@
// MIPS64BE:#define __MIPSEB__ 1
// MIPS64BE:#define __POINTER_WIDTH__ 64
// MIPS64BE:#define __PRAGMA_REDEFINE_EXTNAME 1
-// MIPS64BE:#define __PTRDIFF_TYPE__ long int
+// MIPS64BE:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// MIPS64BE:#define __PTRDIFF_WIDTH__ 64
// MIPS64BE:#define __REGISTER_PREFIX__
// MIPS64BE:#define __SCHAR_MAX__ 127
@@ -1236,7 +1236,7 @@
// MIPS64BE:#define __SIZEOF_WCHAR_T__ 4
// MIPS64BE:#define __SIZEOF_WINT_T__ 4
// MIPS64BE:#define __SIZE_MAX__ 18446744073709551615UL
-// MIPS64BE:#define __SIZE_TYPE__ long unsigned int
+// MIPS64BE:#define __SIZE_TYPE__ __typeof(sizeof(0))
// MIPS64BE:#define __SIZE_WIDTH__ 64
// MIPS64BE-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
// MIPS64BE:#define __UINT16_C(c) c
@@ -1436,7 +1436,7 @@
// MIPS64EL:#define __MIPSEL__ 1
// MIPS64EL:#define __POINTER_WIDTH__ 64
// MIPS64EL:#define __PRAGMA_REDEFINE_EXTNAME 1
-// MIPS64EL:#define __PTRDIFF_TYPE__ long int
+// MIPS64EL:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// MIPS64EL:#define __PTRDIFF_WIDTH__ 64
// MIPS64EL:#define __REGISTER_PREFIX__
// MIPS64EL:#define __SCHAR_MAX__ 127
@@ -1457,7 +1457,7 @@
// MIPS64EL:#define __SIZEOF_WCHAR_T__ 4
// MIPS64EL:#define __SIZEOF_WINT_T__ 4
// MIPS64EL:#define __SIZE_MAX__ 18446744073709551615UL
-// MIPS64EL:#define __SIZE_TYPE__ long unsigned int
+// MIPS64EL:#define __SIZE_TYPE__ __typeof(sizeof(0))
// MIPS64EL:#define __SIZE_WIDTH__ 64
// MIPS64EL:#define __UINT16_C(c) c
// MIPS64EL:#define __UINT16_C_SUFFIX__
diff --git a/clang/test/Preprocessor/init-ppc.c b/clang/test/Preprocessor/init-ppc.c
index 6b7eceda9b97b..2f73133cf6bd9 100644
--- a/clang/test/Preprocessor/init-ppc.c
+++ b/clang/test/Preprocessor/init-ppc.c
@@ -132,7 +132,7 @@
// PPC603E:#define __POINTER_WIDTH__ 32
// PPC603E:#define __POWERPC__ 1
// PPC603E:#define __PPC__ 1
-// PPC603E:#define __PTRDIFF_TYPE__ long int
+// PPC603E:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC603E:#define __PTRDIFF_WIDTH__ 32
// PPC603E:#define __REGISTER_PREFIX__
// PPC603E:#define __SCHAR_MAX__ 127
@@ -152,7 +152,7 @@
// PPC603E:#define __SIZEOF_WCHAR_T__ 4
// PPC603E:#define __SIZEOF_WINT_T__ 4
// PPC603E:#define __SIZE_MAX__ 4294967295UL
-// PPC603E:#define __SIZE_TYPE__ long unsigned int
+// PPC603E:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC603E:#define __SIZE_WIDTH__ 32
// PPC603E-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
// PPC603E:#define __UINT16_C(c) c
@@ -337,7 +337,7 @@
// PPC:#define __POWERPC__ 1
// PPC-NOT:#define __PPC 1
// PPC:#define __PPC__ 1
-// PPC:#define __PTRDIFF_TYPE__ long int
+// PPC:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC:#define __PTRDIFF_WIDTH__ 32
// PPC:#define __REGISTER_PREFIX__
// PPC:#define __SCHAR_MAX__ 127
@@ -357,7 +357,7 @@
// PPC:#define __SIZEOF_WCHAR_T__ 4
// PPC:#define __SIZEOF_WINT_T__ 4
// PPC:#define __SIZE_MAX__ 4294967295UL
-// PPC:#define __SIZE_TYPE__ long unsigned int
+// PPC:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC:#define __SIZE_WIDTH__ 32
// PPC:#define __UINT16_C(c) c
// PPC:#define __UINT16_C_SUFFIX__
@@ -546,7 +546,7 @@
// PPC-AIX:#define __POWERPC__ 1
// PPC-AIX:#define __PPC 1
// PPC-AIX:#define __PPC__ 1
-// PPC-AIX:#define __PTRDIFF_TYPE__ long int
+// PPC-AIX:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC-AIX:#define __PTRDIFF_WIDTH__ 32
// PPC-AIX:#define __REGISTER_PREFIX__
// PPC-AIX:#define __SCHAR_MAX__ 127
@@ -566,7 +566,7 @@
// PPC-AIX:#define __SIZEOF_WCHAR_T__ 2
// PPC-AIX:#define __SIZEOF_WINT_T__ 4
// PPC-AIX:#define __SIZE_MAX__ 4294967295UL
-// PPC-AIX:#define __SIZE_TYPE__ long unsigned int
+// PPC-AIX:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC-AIX:#define __SIZE_WIDTH__ 32
// PPC-AIX:#define __THW_BIG_ENDIAN__ 1
// PPC-AIX:#define __THW_PPC__ 1
@@ -928,7 +928,7 @@
// PPC-LINUX:#define __POINTER_WIDTH__ 32
// PPC-LINUX:#define __POWERPC__ 1
// PPC-LINUX:#define __PPC__ 1
-// PPC-LINUX:#define __PTRDIFF_TYPE__ int
+// PPC-LINUX:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC-LINUX:#define __PTRDIFF_WIDTH__ 32
// PPC-LINUX:#define __REGISTER_PREFIX__
// PPC-LINUX:#define __SCHAR_MAX__ 127
@@ -948,7 +948,7 @@
// PPC-LINUX:#define __SIZEOF_WCHAR_T__ 4
// PPC-LINUX:#define __SIZEOF_WINT_T__ 4
// PPC-LINUX:#define __SIZE_MAX__ 4294967295U
-// PPC-LINUX:#define __SIZE_TYPE__ unsigned int
+// PPC-LINUX:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC-LINUX:#define __SIZE_WIDTH__ 32
// PPC-LINUX:#define __UINT16_C(c) c
// PPC-LINUX:#define __UINT16_C_SUFFIX__
diff --git a/clang/test/Preprocessor/init-ppc64.c b/clang/test/Preprocessor/init-ppc64.c
index 7dffd4627481b..f1f7307f7653c 100644
--- a/clang/test/Preprocessor/init-ppc64.c
+++ b/clang/test/Preprocessor/init-ppc64.c
@@ -139,7 +139,7 @@
// PPC64:#define __POWERPC__ 1
// PPC64:#define __PPC64__ 1
// PPC64:#define __PPC__ 1
-// PPC64:#define __PTRDIFF_TYPE__ long int
+// PPC64:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC64:#define __PTRDIFF_WIDTH__ 64
// PPC64:#define __REGISTER_PREFIX__
// PPC64:#define __SCHAR_MAX__ 127
@@ -159,7 +159,7 @@
// PPC64:#define __SIZEOF_WCHAR_T__ 4
// PPC64:#define __SIZEOF_WINT_T__ 4
// PPC64:#define __SIZE_MAX__ 18446744073709551615UL
-// PPC64:#define __SIZE_TYPE__ long unsigned int
+// PPC64:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC64:#define __SIZE_WIDTH__ 64
// PPC64-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
// PPC64:#define __UINT16_C(c) c
@@ -353,7 +353,7 @@
// PPC64LE:#define __POWERPC__ 1
// PPC64LE:#define __PPC64__ 1
// PPC64LE:#define __PPC__ 1
-// PPC64LE:#define __PTRDIFF_TYPE__ long int
+// PPC64LE:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC64LE:#define __PTRDIFF_WIDTH__ 64
// PPC64LE:#define __REGISTER_PREFIX__
// PPC64LE:#define __SCHAR_MAX__ 127
@@ -373,7 +373,7 @@
// PPC64LE:#define __SIZEOF_WCHAR_T__ 4
// PPC64LE:#define __SIZEOF_WINT_T__ 4
// PPC64LE:#define __SIZE_MAX__ 18446744073709551615UL
-// PPC64LE:#define __SIZE_TYPE__ long unsigned int
+// PPC64LE:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC64LE:#define __SIZE_WIDTH__ 64
// PPC64LE:#define __STRUCT_PARM_ALIGN__ 16
// PPC64LE:#define __UINT16_C(c) c
@@ -844,7 +844,7 @@
// PPC64-AIX:#define __POWERPC__ 1
// PPC64-AIX:#define __PPC64__ 1
// PPC64-AIX:#define __PPC__ 1
-// PPC64-AIX:#define __PTRDIFF_TYPE__ long int
+// PPC64-AIX:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC64-AIX:#define __PTRDIFF_WIDTH__ 64
// PPC64-AIX:#define __REGISTER_PREFIX__
// PPC64-AIX:#define __SCHAR_MAX__ 127
@@ -865,7 +865,7 @@
// PPC64-AIX:#define __SIZEOF_WCHAR_T__ 4
// PPC64-AIX:#define __SIZEOF_WINT_T__ 4
// PPC64-AIX:#define __SIZE_MAX__ 18446744073709551615UL
-// PPC64-AIX:#define __SIZE_TYPE__ long unsigned int
+// PPC64-AIX:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC64-AIX:#define __SIZE_WIDTH__ 64
// PPC64-AIX:#define __UINT16_C(c) c
// PPC64-AIX:#define __UINT16_C_SUFFIX__
@@ -1052,7 +1052,7 @@
// PPC64-LINUX:#define __POWERPC__ 1
// PPC64-LINUX:#define __PPC64__ 1
// PPC64-LINUX:#define __PPC__ 1
-// PPC64-LINUX:#define __PTRDIFF_TYPE__ long int
+// PPC64-LINUX:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PPC64-LINUX:#define __PTRDIFF_WIDTH__ 64
// PPC64-LINUX:#define __REGISTER_PREFIX__
// PPC64-LINUX:#define __SCHAR_MAX__ 127
@@ -1072,7 +1072,7 @@
// PPC64-LINUX:#define __SIZEOF_WCHAR_T__ 4
// PPC64-LINUX:#define __SIZEOF_WINT_T__ 4
// PPC64-LINUX:#define __SIZE_MAX__ 18446744073709551615UL
-// PPC64-LINUX:#define __SIZE_TYPE__ long unsigned int
+// PPC64-LINUX:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PPC64-LINUX:#define __SIZE_WIDTH__ 64
// PPC64-LINUX:#define __UINT16_C(c) c
// PPC64-LINUX:#define __UINT16_C_SUFFIX__
diff --git a/clang/test/Preprocessor/init-s390x.c b/clang/test/Preprocessor/init-s390x.c
index a8fbde46cbb75..4f5f299fa2d0a 100644
--- a/clang/test/Preprocessor/init-s390x.c
+++ b/clang/test/Preprocessor/init-s390x.c
@@ -120,7 +120,7 @@
// S390X:#define __LONG_MAX__ 9223372036854775807L
// S390X:#define __NO_INLINE__ 1
// S390X:#define __POINTER_WIDTH__ 64
-// S390X:#define __PTRDIFF_TYPE__ long int
+// S390X:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// S390X:#define __PTRDIFF_WIDTH__ 64
// S390X:#define __SCHAR_MAX__ 127
// S390X:#define __SHRT_MAX__ 32767
@@ -138,7 +138,7 @@
// S390X:#define __SIZEOF_SIZE_T__ 8
// S390X:#define __SIZEOF_WCHAR_T__ 4
// S390X:#define __SIZEOF_WINT_T__ 4
-// S390X:#define __SIZE_TYPE__ long unsigned int
+// S390X:#define __SIZE_TYPE__ __typeof(sizeof(0))
// S390X:#define __SIZE_WIDTH__ 64
// S390X-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8UL
// S390X:#define __UINT16_C(c) c
diff --git a/clang/test/Preprocessor/init-v7k-compat.c b/clang/test/Preprocessor/init-v7k-compat.c
index a9c6e7a290646..697f31589c614 100644
--- a/clang/test/Preprocessor/init-v7k-compat.c
+++ b/clang/test/Preprocessor/init-v7k-compat.c
@@ -124,7 +124,7 @@
// CHECK: #define __LONG_LONG_MAX__ 9223372036854775807LL
// CHECK: #define __LONG_MAX__ 2147483647L
// CHECK: #define __POINTER_WIDTH__ 32
-// CHECK: #define __PTRDIFF_TYPE__ long int
+// CHECK: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// CHECK: #define __PTRDIFF_WIDTH__ 32
// CHECK: #define __SCHAR_MAX__ 127
// CHECK: #define __SHRT_MAX__ 32767
@@ -143,7 +143,7 @@
// CHECK: #define __SIZEOF_WCHAR_T__ 4
// CHECK: #define __SIZEOF_WINT_T__ 4
// CHECK: #define __SIZE_MAX__ 4294967295UL
-// CHECK: #define __SIZE_TYPE__ long unsigned int
+// CHECK: #define __SIZE_TYPE__ __typeof(sizeof(0))
// CHECK: #define __SIZE_WIDTH__ 32
// CHECK: #define __UINT16_C(c) c
// CHECK: #define __UINT16_C_SUFFIX__ {{$}}
diff --git a/clang/test/Preprocessor/init-ve.c b/clang/test/Preprocessor/init-ve.c
index 711c2a04865b3..99ed2f9292cd8 100644
--- a/clang/test/Preprocessor/init-ve.c
+++ b/clang/test/Preprocessor/init-ve.c
@@ -140,7 +140,7 @@
// VE:#define __PTRDIFF_FMTd__ "ld"
// VE:#define __PTRDIFF_FMTi__ "li"
// VE:#define __PTRDIFF_MAX__ 9223372036854775807L
-// VE:#define __PTRDIFF_TYPE__ long int
+// VE:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// VE:#define __PTRDIFF_WIDTH__ 64
// VE:#define __SCHAR_MAX__ 127
// VE:#define __SHRT_MAX__ 32767
@@ -164,7 +164,7 @@
// VE:#define __SIZE_FMTu__ "lu"
// VE:#define __SIZE_FMTx__ "lx"
// VE:#define __SIZE_MAX__ 18446744073709551615UL
-// VE:#define __SIZE_TYPE__ long unsigned int
+// VE:#define __SIZE_TYPE__ __typeof(sizeof(0))
// VE:#define __SIZE_WIDTH__ 64
// VE-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
// VE-HOSTED:#define __STDC_HOSTED__ 1
diff --git a/clang/test/Preprocessor/init-x86.c b/clang/test/Preprocessor/init-x86.c
index f5fd976b3db73..b1a9082b36e4b 100644
--- a/clang/test/Preprocessor/init-x86.c
+++ b/clang/test/Preprocessor/init-x86.c
@@ -123,7 +123,7 @@
// I386-NOT:#define __LP64__
// I386:#define __NO_MATH_INLINES 1
// I386:#define __POINTER_WIDTH__ 32
-// I386:#define __PTRDIFF_TYPE__ int
+// I386:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// I386:#define __PTRDIFF_WIDTH__ 32
// I386:#define __REGISTER_PREFIX__
// I386:#define __SCHAR_MAX__ 127
@@ -143,7 +143,7 @@
// I386:#define __SIZEOF_WCHAR_T__ 4
// I386:#define __SIZEOF_WINT_T__ 4
// I386:#define __SIZE_MAX__ 4294967295U
-// I386:#define __SIZE_TYPE__ unsigned int
+// I386:#define __SIZE_TYPE__ __typeof(sizeof(0))
// I386:#define __SIZE_WIDTH__ 32
// I386:#define __UINT16_C(c) c
// I386:#define __UINT16_C_SUFFIX__
@@ -333,7 +333,7 @@
// I386-LINUX-NOT:#define __LP64__
// I386-LINUX:#define __NO_MATH_INLINES 1
// I386-LINUX:#define __POINTER_WIDTH__ 32
-// I386-LINUX:#define __PTRDIFF_TYPE__ int
+// I386-LINUX:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// I386-LINUX:#define __PTRDIFF_WIDTH__ 32
// I386-LINUX:#define __REGISTER_PREFIX__
// I386-LINUX:#define __SCHAR_MAX__ 127
@@ -353,7 +353,7 @@
// I386-LINUX:#define __SIZEOF_WCHAR_T__ 4
// I386-LINUX:#define __SIZEOF_WINT_T__ 4
// I386-LINUX:#define __SIZE_MAX__ 4294967295U
-// I386-LINUX:#define __SIZE_TYPE__ unsigned int
+// I386-LINUX:#define __SIZE_TYPE__ __typeof(sizeof(0))
// I386-LINUX:#define __SIZE_WIDTH__ 32
// I386-LINUX-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
// I386-LINUX:#define __UINT16_C(c) c
@@ -544,7 +544,7 @@
// I386-NETBSD-NOT:#define __LP64__
// I386-NETBSD:#define __NO_MATH_INLINES 1
// I386-NETBSD:#define __POINTER_WIDTH__ 32
-// I386-NETBSD:#define __PTRDIFF_TYPE__ int
+// I386-NETBSD:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// I386-NETBSD:#define __PTRDIFF_WIDTH__ 32
// I386-NETBSD:#define __REGISTER_PREFIX__
// I386-NETBSD:#define __SCHAR_MAX__ 127
@@ -564,7 +564,7 @@
// I386-NETBSD:#define __SIZEOF_WCHAR_T__ 4
// I386-NETBSD:#define __SIZEOF_WINT_T__ 4
// I386-NETBSD:#define __SIZE_MAX__ 4294967295U
-// I386-NETBSD:#define __SIZE_TYPE__ unsigned int
+// I386-NETBSD:#define __SIZE_TYPE__ __typeof(sizeof(0))
// I386-NETBSD:#define __SIZE_WIDTH__ 32
// I386-NETBSD-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 4U
// I386-NETBSD:#define __UINT16_C(c) c
@@ -756,7 +756,7 @@
// X86_64:#define __MMX__ 1
// X86_64:#define __NO_MATH_INLINES 1
// X86_64:#define __POINTER_WIDTH__ 64
-// X86_64:#define __PTRDIFF_TYPE__ long int
+// X86_64:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// X86_64:#define __PTRDIFF_WIDTH__ 64
// X86_64:#define __REGISTER_PREFIX__
// X86_64:#define __SCHAR_MAX__ 127
@@ -776,7 +776,7 @@
// X86_64:#define __SIZEOF_WCHAR_T__ 4
// X86_64:#define __SIZEOF_WINT_T__ 4
// X86_64:#define __SIZE_MAX__ 18446744073709551615UL
-// X86_64:#define __SIZE_TYPE__ long unsigned int
+// X86_64:#define __SIZE_TYPE__ __typeof(sizeof(0))
// X86_64:#define __SIZE_WIDTH__ 64
// X86_64:#define __SSE2_MATH__ 1
// X86_64:#define __SSE2__ 1
@@ -970,7 +970,7 @@
// X32:#define __MMX__ 1
// X32:#define __NO_MATH_INLINES 1
// X32:#define __POINTER_WIDTH__ 32
-// X32:#define __PTRDIFF_TYPE__ int
+// X32:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// X32:#define __PTRDIFF_WIDTH__ 32
// X32:#define __REGISTER_PREFIX__
// X32:#define __SCHAR_MAX__ 127
@@ -990,7 +990,7 @@
// X32:#define __SIZEOF_WCHAR_T__ 4
// X32:#define __SIZEOF_WINT_T__ 4
// X32:#define __SIZE_MAX__ 4294967295U
-// X32:#define __SIZE_TYPE__ unsigned int
+// X32:#define __SIZE_TYPE__ __typeof(sizeof(0))
// X32:#define __SIZE_WIDTH__ 32
// X32:#define __SSE2_MATH__ 1
// X32:#define __SSE2__ 1
@@ -1185,7 +1185,7 @@
// X86_64-LINUX:#define __MMX__ 1
// X86_64-LINUX:#define __NO_MATH_INLINES 1
// X86_64-LINUX:#define __POINTER_WIDTH__ 64
-// X86_64-LINUX:#define __PTRDIFF_TYPE__ long int
+// X86_64-LINUX:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// X86_64-LINUX:#define __PTRDIFF_WIDTH__ 64
// X86_64-LINUX:#define __REGISTER_PREFIX__
// X86_64-LINUX:#define __SCHAR_MAX__ 127
@@ -1205,7 +1205,7 @@
// X86_64-LINUX:#define __SIZEOF_WCHAR_T__ 4
// X86_64-LINUX:#define __SIZEOF_WINT_T__ 4
// X86_64-LINUX:#define __SIZE_MAX__ 18446744073709551615UL
-// X86_64-LINUX:#define __SIZE_TYPE__ long unsigned int
+// X86_64-LINUX:#define __SIZE_TYPE__ __typeof(sizeof(0))
// X86_64-LINUX:#define __SIZE_WIDTH__ 64
// X86_64-LINUX:#define __SSE2_MATH__ 1
// X86_64-LINUX:#define __SSE2__ 1
@@ -1407,7 +1407,7 @@
// X86_64-NETBSD:#define __MMX__ 1
// X86_64-NETBSD:#define __NO_MATH_INLINES 1
// X86_64-NETBSD:#define __POINTER_WIDTH__ 64
-// X86_64-NETBSD:#define __PTRDIFF_TYPE__ long int
+// X86_64-NETBSD:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// X86_64-NETBSD:#define __PTRDIFF_WIDTH__ 64
// X86_64-NETBSD:#define __REGISTER_PREFIX__
// X86_64-NETBSD:#define __SCHAR_MAX__ 127
@@ -1427,7 +1427,7 @@
// X86_64-NETBSD:#define __SIZEOF_WCHAR_T__ 4
// X86_64-NETBSD:#define __SIZEOF_WINT_T__ 4
// X86_64-NETBSD:#define __SIZE_MAX__ 18446744073709551615UL
-// X86_64-NETBSD:#define __SIZE_TYPE__ long unsigned int
+// X86_64-NETBSD:#define __SIZE_TYPE__ __typeof(sizeof(0))
// X86_64-NETBSD:#define __SIZE_WIDTH__ 64
// X86_64-NETBSD:#define __SSE2_MATH__ 1
// X86_64-NETBSD:#define __SSE2__ 1
@@ -1625,7 +1625,7 @@
// I386-CYGWIN-NOT:#define __LP64__
// I386-CYGWIN:#define __NO_MATH_INLINES 1
// I386-CYGWIN:#define __POINTER_WIDTH__ 32
-// I386-CYGWIN:#define __PTRDIFF_TYPE__ int
+// I386-CYGWIN:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// I386-CYGWIN:#define __PTRDIFF_WIDTH__ 32
// I386-CYGWIN:#define __REGISTER_PREFIX__
// I386-CYGWIN:#define __SCHAR_MAX__ 127
@@ -1645,7 +1645,7 @@
// I386-CYGWIN:#define __SIZEOF_WCHAR_T__ 2
// I386-CYGWIN:#define __SIZEOF_WINT_T__ 4
// I386-CYGWIN:#define __SIZE_MAX__ 4294967295U
-// I386-CYGWIN:#define __SIZE_TYPE__ unsigned int
+// I386-CYGWIN:#define __SIZE_TYPE__ __typeof(sizeof(0))
// I386-CYGWIN:#define __SIZE_WIDTH__ 32
// I386-CYGWIN:#define __UINT16_C(c) c
// I386-CYGWIN:#define __UINT16_C_SUFFIX__
@@ -1837,7 +1837,7 @@
// X86_64-CYGWIN:#define __MMX__ 1
// X86_64-CYGWIN:#define __NO_MATH_INLINES 1
// X86_64-CYGWIN:#define __POINTER_WIDTH__ 64
-// X86_64-CYGWIN:#define __PTRDIFF_TYPE__ long int
+// X86_64-CYGWIN:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// X86_64-CYGWIN:#define __PTRDIFF_WIDTH__ 64
// X86_64-CYGWIN:#define __REGISTER_PREFIX__
// X86_64-CYGWIN:#define __SCHAR_MAX__ 127
@@ -1857,7 +1857,7 @@
// X86_64-CYGWIN:#define __SIZEOF_WCHAR_T__ 2
// X86_64-CYGWIN:#define __SIZEOF_WINT_T__ 4
// X86_64-CYGWIN:#define __SIZE_MAX__ 18446744073709551615UL
-// X86_64-CYGWIN:#define __SIZE_TYPE__ long unsigned int
+// X86_64-CYGWIN:#define __SIZE_TYPE__ __typeof(sizeof(0))
// X86_64-CYGWIN:#define __SIZE_WIDTH__ 64
// X86_64-CYGWIN:#define __SSE2_MATH__ 1
// X86_64-CYGWIN:#define __SSE2__ 1
diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c
index 7e0df96141364..cca0f71a12d8f 100644
--- a/clang/test/Preprocessor/init.c
+++ b/clang/test/Preprocessor/init.c
@@ -514,7 +514,7 @@
// MSP430-NOT:#define __LP64__
// MSP430:#define __MSP430__ 1
// MSP430:#define __POINTER_WIDTH__ 16
-// MSP430:#define __PTRDIFF_TYPE__ int
+// MSP430:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// MSP430:#define __PTRDIFF_WIDTH__ 16
// MSP430:#define __SCHAR_MAX__ 127
// MSP430:#define __SHRT_MAX__ 32767
@@ -533,7 +533,7 @@
// MSP430:#define __SIZEOF_WCHAR_T__ 2
// MSP430:#define __SIZEOF_WINT_T__ 2
// MSP430:#define __SIZE_MAX__ 65535U
-// MSP430:#define __SIZE_TYPE__ unsigned int
+// MSP430:#define __SIZE_TYPE__ __typeof(sizeof(0))
// MSP430:#define __SIZE_WIDTH__ 16
// MSP430-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 2U
// MSP430:#define __UINT16_C(c) c##U
@@ -712,7 +712,7 @@
// NVPTX32:#define __NVPTX__ 1
// NVPTX32:#define __POINTER_WIDTH__ 32
// NVPTX32:#define __PRAGMA_REDEFINE_EXTNAME 1
-// NVPTX32:#define __PTRDIFF_TYPE__ int
+// NVPTX32:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// NVPTX32:#define __PTRDIFF_WIDTH__ 32
// NVPTX32:#define __PTX__ 1
// NVPTX32:#define __SCHAR_MAX__ 127
@@ -732,7 +732,7 @@
// NVPTX32:#define __SIZEOF_WCHAR_T__ 4
// NVPTX32:#define __SIZEOF_WINT_T__ 4
// NVPTX32:#define __SIZE_MAX__ 4294967295U
-// NVPTX32:#define __SIZE_TYPE__ unsigned int
+// NVPTX32:#define __SIZE_TYPE__ __typeof(sizeof(0))
// NVPTX32:#define __SIZE_WIDTH__ 32
// NVPTX32-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
// NVPTX32:#define __UINT16_C(c) c
@@ -910,7 +910,7 @@
// NVPTX64:#define __NVPTX__ 1
// NVPTX64:#define __POINTER_WIDTH__ 64
// NVPTX64:#define __PRAGMA_REDEFINE_EXTNAME 1
-// NVPTX64:#define __PTRDIFF_TYPE__ long int
+// NVPTX64:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// NVPTX64:#define __PTRDIFF_WIDTH__ 64
// NVPTX64:#define __PTX__ 1
// NVPTX64:#define __SCHAR_MAX__ 127
@@ -930,7 +930,7 @@
// NVPTX64:#define __SIZEOF_WCHAR_T__ 4
// NVPTX64:#define __SIZEOF_WINT_T__ 4
// NVPTX64:#define __SIZE_MAX__ 18446744073709551615UL
-// NVPTX64:#define __SIZE_TYPE__ long unsigned int
+// NVPTX64:#define __SIZE_TYPE__ __typeof(sizeof(0))
// NVPTX64:#define __SIZE_WIDTH__ 64
// NVPTX64-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8UL
// NVPTX64:#define __UINT16_C(c) c
@@ -1123,8 +1123,8 @@
// SPARC:#define __LONG_MAX__ 2147483647L
// SPARC-NOT:#define __LP64__
// SPARC:#define __POINTER_WIDTH__ 32
-// SPARC-DEFAULT:#define __PTRDIFF_TYPE__ int
-// SPARC-NETOPENBSD:#define __PTRDIFF_TYPE__ long int
+// SPARC-DEFAULT:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// SPARC-NETOPENBSD:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// SPARC:#define __PTRDIFF_WIDTH__ 32
// SPARC:#define __REGISTER_PREFIX__
// SPARC:#define __SCHAR_MAX__ 127
@@ -1144,9 +1144,9 @@
// SPARC:#define __SIZEOF_WCHAR_T__ 4
// SPARC:#define __SIZEOF_WINT_T__ 4
// SPARC-DEFAULT:#define __SIZE_MAX__ 4294967295U
-// SPARC-DEFAULT:#define __SIZE_TYPE__ unsigned int
+// SPARC-DEFAULT:#define __SIZE_TYPE__ __typeof(sizeof(0))
// SPARC-NETOPENBSD:#define __SIZE_MAX__ 4294967295UL
-// SPARC-NETOPENBSD:#define __SIZE_TYPE__ long unsigned int
+// SPARC-NETOPENBSD:#define __SIZE_TYPE__ __typeof(sizeof(0))
// SPARC:#define __SIZE_WIDTH__ 32
// SPARC-DEFAULT-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
// SPARC:#define __UINT16_C(c) c
@@ -1313,7 +1313,7 @@
// TCE:#define __LONG_MAX__ 2147483647L
// TCE-NOT:#define __LP64__
// TCE:#define __POINTER_WIDTH__ 32
-// TCE:#define __PTRDIFF_TYPE__ int
+// TCE:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// TCE:#define __PTRDIFF_WIDTH__ 32
// TCE:#define __SCHAR_MAX__ 127
// TCE:#define __SHRT_MAX__ 32767
@@ -1332,7 +1332,7 @@
// TCE:#define __SIZEOF_WCHAR_T__ 4
// TCE:#define __SIZEOF_WINT_T__ 4
// TCE:#define __SIZE_MAX__ 4294967295U
-// TCE:#define __SIZE_TYPE__ unsigned int
+// TCE:#define __SIZE_TYPE__ __typeof(sizeof(0))
// TCE:#define __SIZE_WIDTH__ 32
// TCE-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 4U
// TCE:#define __TCE_V1__ 1
@@ -1455,7 +1455,7 @@
// PS4:#define __POINTER_WIDTH__ 64
// PS5ONLY:#define __PROSPERO__ 1
// PS4:#define __PTRDIFF_MAX__ 9223372036854775807L
-// PS4:#define __PTRDIFF_TYPE__ long int
+// PS4:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// PS4:#define __PTRDIFF_WIDTH__ 64
// PS4:#define __REGISTER_PREFIX__
// PS4:#define __SCE__ 1
@@ -1475,7 +1475,7 @@
// PS4:#define __SIZEOF_SIZE_T__ 8
// PS4:#define __SIZEOF_WCHAR_T__ 2
// PS4:#define __SIZEOF_WINT_T__ 4
-// PS4:#define __SIZE_TYPE__ long unsigned int
+// PS4:#define __SIZE_TYPE__ __typeof(sizeof(0))
// PS4:#define __SIZE_WIDTH__ 64
// PS4:#define __SSE2_MATH__ 1
// PS4:#define __SSE2__ 1
@@ -1603,8 +1603,8 @@
// OPENBSD:#define __INTMAX_TYPE__ long long int
// OPENBSD:#define __INTPTR_TYPE__ long int
// OPENBSD:#define __OpenBSD__ 1
-// OPENBSD:#define __PTRDIFF_TYPE__ long int
-// OPENBSD:#define __SIZE_TYPE__ long unsigned int
+// OPENBSD:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// OPENBSD:#define __SIZE_TYPE__ __typeof(sizeof(0))
// OPENBSD:#define __UINT16_TYPE__ unsigned short
// OPENBSD:#define __UINT32_TYPE__ unsigned int
// OPENBSD:#define __UINT64_TYPE__ long long unsigned int
@@ -1912,7 +1912,7 @@
// WEBASSEMBLY-NEXT:#define __PTRDIFF_FMTi__ "li"
// WEBASSEMBLY32-NEXT:#define __PTRDIFF_MAX__ 2147483647L
// WEBASSEMBLY64-NEXT:#define __PTRDIFF_MAX__ 9223372036854775807L
-// WEBASSEMBLY-NEXT:#define __PTRDIFF_TYPE__ long int
+// WEBASSEMBLY-NEXT:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// WEBASSEMBLY32-NEXT:#define __PTRDIFF_WIDTH__ 32
// WEBASSEMBLY64-NEXT:#define __PTRDIFF_WIDTH__ 64
// WEBASSEMBLY-NOT:#define __REGISTER_PREFIX__
@@ -1946,7 +1946,7 @@
// WEBASSEMBLY-NEXT:#define __SIZE_FMTx__ "lx"
// WEBASSEMBLY32-NEXT:#define __SIZE_MAX__ 4294967295UL
// WEBASSEMBLY64-NEXT:#define __SIZE_MAX__ 18446744073709551615UL
-// WEBASSEMBLY-NEXT:#define __SIZE_TYPE__ long unsigned int
+// WEBASSEMBLY-NEXT:#define __SIZE_TYPE__ __typeof(sizeof(0))
// WEBASSEMBLY32-NEXT:#define __SIZE_WIDTH__ 32
// WEBASSEMBLY64-NEXT:#define __SIZE_WIDTH__ 64
// WEBASSEMBLY-NEXT:#define __STDC_EMBED_EMPTY__ 2
@@ -2227,7 +2227,7 @@
// AVR:#define __ORDER_PDP_ENDIAN__ 3412
// AVR:#define __PRAGMA_REDEFINE_EXTNAME 1
// AVR:#define __PTRDIFF_MAX__ 32767
-// AVR:#define __PTRDIFF_TYPE__ int
+// AVR:#define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// AVR:#define __SCHAR_MAX__ 127
// AVR:#define __SHRT_MAX__ 32767
// AVR:#define __SIG_ATOMIC_MAX__ 127
@@ -2245,7 +2245,7 @@
// AVR:#define __SIZEOF_WCHAR_T__ 2
// AVR:#define __SIZEOF_WINT_T__ 2
// AVR:#define __SIZE_MAX__ 65535U
-// AVR:#define __SIZE_TYPE__ unsigned int
+// AVR:#define __SIZE_TYPE__ __typeof(sizeof(0))
// AVR:#define __STDC__ 1
// AVR:#define __UINT16_MAX__ 65535U
// AVR:#define __UINT16_TYPE__ unsigned int
@@ -2336,12 +2336,12 @@
// RUN: %clang_cc1 -triple x86_64-apple-macosx -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix MACOS-64 %s
// MACOS-32: #define __INTPTR_TYPE__ long int
-// MACOS-32: #define __PTRDIFF_TYPE__ int
-// MACOS-32: #define __SIZE_TYPE__ long unsigned int
+// MACOS-32: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// MACOS-32: #define __SIZE_TYPE__ __typeof(sizeof(0))
// MACOS-64: #define __INTPTR_TYPE__ long int
-// MACOS-64: #define __PTRDIFF_TYPE__ long int
-// MACOS-64: #define __SIZE_TYPE__ long unsigned int
+// MACOS-64: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// MACOS-64: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RUN: %clang_cc1 -triple i386-apple-ios-simulator -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix IOS-32 %s
// RUN: %clang_cc1 -triple armv7-apple-ios -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix IOS-32 %s
@@ -2349,12 +2349,12 @@
// RUN: %clang_cc1 -triple arm64-apple-ios -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix IOS-64 %s
// IOS-32: #define __INTPTR_TYPE__ long int
-// IOS-32: #define __PTRDIFF_TYPE__ int
-// IOS-32: #define __SIZE_TYPE__ long unsigned int
+// IOS-32: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// IOS-32: #define __SIZE_TYPE__ __typeof(sizeof(0))
// IOS-64: #define __INTPTR_TYPE__ long int
-// IOS-64: #define __PTRDIFF_TYPE__ long int
-// IOS-64: #define __SIZE_TYPE__ long unsigned int
+// IOS-64: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// IOS-64: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RUN: %clang_cc1 -triple i386-apple-tvos-simulator -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix TVOS-32 %s
// RUN: %clang_cc1 -triple armv7-apple-tvos -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix TVOS-32 %s
@@ -2362,12 +2362,12 @@
// RUN: %clang_cc1 -triple arm64-apple-tvos -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix TVOS-64 %s
// TVOS-32: #define __INTPTR_TYPE__ long int
-// TVOS-32: #define __PTRDIFF_TYPE__ int
-// TVOS-32: #define __SIZE_TYPE__ long unsigned int
+// TVOS-32: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// TVOS-32: #define __SIZE_TYPE__ __typeof(sizeof(0))
// TVOS-64: #define __INTPTR_TYPE__ long int
-// TVOS-64: #define __PTRDIFF_TYPE__ long int
-// TVOS-64: #define __SIZE_TYPE__ long unsigned int
+// TVOS-64: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// TVOS-64: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RUN: %clang_cc1 -triple i386-apple-watchos-simulator -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix WATCHOS-32 %s
// RUN: %clang_cc1 -triple armv7k-apple-watchos -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix WATCHOS-64 %s
@@ -2375,23 +2375,23 @@
// RUN: %clang_cc1 -triple arm64-apple-watchos -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix WATCHOS-64 %s
// WATCHOS-32: #define __INTPTR_TYPE__ long int
-// WATCHOS-32: #define __PTRDIFF_TYPE__ int
-// WATCHOS-32: #define __SIZE_TYPE__ long unsigned int
+// WATCHOS-32: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// WATCHOS-32: #define __SIZE_TYPE__ __typeof(sizeof(0))
// WATCHOS-64: #define __INTPTR_TYPE__ long int
-// WATCHOS-64: #define __PTRDIFF_TYPE__ long int
-// WATCHOS-64: #define __SIZE_TYPE__ long unsigned int
+// WATCHOS-64: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// WATCHOS-64: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RUN: %clang_cc1 -triple armv7-apple-none-macho -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix ARM-DARWIN-BAREMETAL-32 %s
// RUN: %clang_cc1 -triple arm64-apple-none-macho -ffreestanding -dM -E /dev/null -o - | FileCheck -match-full-lines -check-prefix ARM-DARWIN-BAREMETAL-64 %s
// ARM-DARWIN-BAREMETAL-32: #define __INTPTR_TYPE__ long int
-// ARM-DARWIN-BAREMETAL-32: #define __PTRDIFF_TYPE__ int
-// ARM-DARWIN-BAREMETAL-32: #define __SIZE_TYPE__ long unsigned int
+// ARM-DARWIN-BAREMETAL-32: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// ARM-DARWIN-BAREMETAL-32: #define __SIZE_TYPE__ __typeof(sizeof(0))
// ARM-DARWIN-BAREMETAL-64: #define __INTPTR_TYPE__ long int
-// ARM-DARWIN-BAREMETAL-64: #define __PTRDIFF_TYPE__ long int
-// ARM-DARWIN-BAREMETAL-64: #define __SIZE_TYPE__ long unsigned int
+// ARM-DARWIN-BAREMETAL-64: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
+// ARM-DARWIN-BAREMETAL-64: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RUN: %clang_cc1 -E -dM -ffreestanding -fgnuc-version=4.2.1 -triple=riscv32 < /dev/null \
// RUN: | FileCheck -match-full-lines -check-prefix=RISCV32 %s
@@ -2530,7 +2530,7 @@
// RISCV32: #define __POINTER_WIDTH__ 32
// RISCV32: #define __PRAGMA_REDEFINE_EXTNAME 1
// RISCV32: #define __PTRDIFF_MAX__ 2147483647
-// RISCV32: #define __PTRDIFF_TYPE__ int
+// RISCV32: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// RISCV32: #define __PTRDIFF_WIDTH__ 32
// RISCV32: #define __SCHAR_MAX__ 127
// RISCV32: #define __SHRT_MAX__ 32767
@@ -2550,7 +2550,7 @@
// RISCV32: #define __SIZEOF_WCHAR_T__ 4
// RISCV32: #define __SIZEOF_WINT_T__ 4
// RISCV32: #define __SIZE_MAX__ 4294967295U
-// RISCV32: #define __SIZE_TYPE__ unsigned int
+// RISCV32: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RISCV32: #define __SIZE_WIDTH__ 32
// RISCV32: #define __STDC_HOSTED__ 0
// RISCV32: #define __STDC_UTF_16__ 1
@@ -2754,7 +2754,7 @@
// RISCV64: #define __POINTER_WIDTH__ 64
// RISCV64: #define __PRAGMA_REDEFINE_EXTNAME 1
// RISCV64: #define __PTRDIFF_MAX__ 9223372036854775807L
-// RISCV64: #define __PTRDIFF_TYPE__ long int
+// RISCV64: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// RISCV64: #define __PTRDIFF_WIDTH__ 64
// RISCV64: #define __SCHAR_MAX__ 127
// RISCV64: #define __SHRT_MAX__ 32767
@@ -2773,7 +2773,7 @@
// RISCV64: #define __SIZEOF_WCHAR_T__ 4
// RISCV64: #define __SIZEOF_WINT_T__ 4
// RISCV64: #define __SIZE_MAX__ 18446744073709551615UL
-// RISCV64: #define __SIZE_TYPE__ long unsigned int
+// RISCV64: #define __SIZE_TYPE__ __typeof(sizeof(0))
// RISCV64: #define __SIZE_WIDTH__ 64
// RISCV64: #define __STDC_HOSTED__ 0
// RISCV64: #define __STDC_UTF_16__ 1
@@ -3019,7 +3019,7 @@
// XTENSA: #define __POINTER_WIDTH__ 32
// XTENSA: #define __PRAGMA_REDEFINE_EXTNAME 1
// XTENSA: #define __PTRDIFF_MAX__ 2147483647
-// XTENSA: #define __PTRDIFF_TYPE__ int
+// XTENSA: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// XTENSA: #define __PTRDIFF_WIDTH__ 32
// XTENSA: #define __SCHAR_MAX__ 127
// XTENSA: #define __SHRT_MAX__ 32767
@@ -3039,7 +3039,7 @@
// XTENSA: #define __SIZEOF_WCHAR_T__ 4
// XTENSA: #define __SIZEOF_WINT_T__ 4
// XTENSA: #define __SIZE_MAX__ 4294967295U
-// XTENSA: #define __SIZE_TYPE__ unsigned int
+// XTENSA: #define __SIZE_TYPE__ __typeof(sizeof(0))
// XTENSA: #define __SIZE_WIDTH__ 32
// XTENSA: #define __STDC_EMBED_EMPTY__ 2
// XTENSA: #define __STDC_EMBED_FOUND__ 1
diff --git a/clang/test/Preprocessor/woa-defaults.c b/clang/test/Preprocessor/woa-defaults.c
index 97578239396ac..d58636781e8e0 100644
--- a/clang/test/Preprocessor/woa-defaults.c
+++ b/clang/test/Preprocessor/woa-defaults.c
@@ -15,7 +15,7 @@
// CHECK: #define __ARM_PCS_VFP 1
// CHECK: #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
// CHECK: #define __INTPTR_TYPE__ int
-// CHECK: #define __PTRDIFF_TYPE__ int
+// CHECK: #define __PTRDIFF_TYPE__ __typeof((int*)0-(int*)0)
// CHECK: #define __SIZEOF_DOUBLE__ 8
// CHECK: #define __SIZEOF_FLOAT__ 4
// CHECK: #define __SIZEOF_INT__ 4
@@ -28,7 +28,7 @@
// CHECK: #define __SIZEOF_SIZE_T__ 4
// CHECK: #define __SIZEOF_WCHAR_T__ 2
// CHECK: #define __SIZEOF_WINT_T__ 2
-// CHECK: #define __SIZE_TYPE__ unsigned int
+// CHECK: #define __SIZE_TYPE__ __typeof(sizeof(0))
// CHECK: #define __UINTPTR_TYPE__ unsigned int
// CHECK-NOT: __THUMB_INTERWORK__
diff --git a/clang/test/Sema/warn-bad-function-cast.c b/clang/test/Sema/warn-bad-function-cast.c
index 0172c9b37c97d..b5d5acc996631 100644
--- a/clang/test/Sema/warn-bad-function-cast.c
+++ b/clang/test/Sema/warn-bad-function-cast.c
@@ -13,6 +13,9 @@ char *pf1(void);
int *pf2(void);
_Fract ff1(void);
+typedef __SIZE_TYPE__ size_t;
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+
void
foo(void)
{
@@ -46,8 +49,8 @@ foo(void)
(double)cf(); /* expected-warning {{cast from function call of type '_Complex double' to non-matching type 'double'}} */
(int)ef(); /* expected-warning {{cast from function call of type 'enum e' to non-matching type 'int'}} */
(int)bf(); /* expected-warning {{cast from function call of type '_Bool' to non-matching type 'int'}} */
- (__SIZE_TYPE__)pf1(); /* expected-warning {{cast from function call of type 'char *' to non-matching type 'unsigned long'}} */
- (__PTRDIFF_TYPE__)pf2(); /* expected-warning {{cast from function call of type 'int *' to non-matching type 'long'}} */
+ (size_t)pf1(); /* expected-warning {{cast from function call of type 'char *' to non-matching type 'size_t' (aka 'unsigned long')}} */
+ (ptrdiff_t)pf2(); /* expected-warning {{cast from function call of type 'int *' to non-matching type 'ptrdiff_t' (aka 'long')}} */
(_Fract) if1(); /* expected-warning{{cast from function call of type 'int' to non-matching type '_Fract'}} */
(int)ff1(); /* expected-warning{{cast from function call of type '_Fract' to non-matching type 'int'}} */
}
More information about the cfe-commits
mailing list