From 26908382277e4e5202a1b079837a74c772cb8ae4 Mon Sep 17 00:00:00 2001 From: Hal Finkel Date: Fri, 2 Mar 2012 20:54:36 +0000 Subject: [PATCH] Fix an ABI problem with ptrdiff_t and intptr_t on PPC32 ptrdiff_t on PPC32 on Linux, etc. should be int not long. This does not matter for C, but it does matter for C++ because of name mangling. The preprocessor test has been changed accordingly. llvm-svn: 151935 --- clang/lib/Basic/Targets.cpp | 2 ++ clang/test/Preprocessor/init.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index ac8c355707e5..a7c4f225c3c7 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -865,6 +865,8 @@ public: case llvm::Triple::FreeBSD: case llvm::Triple::NetBSD: SizeType = UnsignedInt; + PtrDiffType = SignedInt; + IntPtrType = SignedInt; break; default: break; diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index aff8c6209211..a43d1765a771 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -852,7 +852,7 @@ // PPC-LINUX:#define __INTMAX_MAX__ 9223372036854775807LL // PPC-LINUX:#define __INTMAX_TYPE__ long long int // PPC-LINUX:#define __INTMAX_WIDTH__ 64 -// PPC-LINUX:#define __INTPTR_TYPE__ long int +// PPC-LINUX:#define __INTPTR_TYPE__ int // PPC-LINUX:#define __INTPTR_WIDTH__ 32 // PPC-LINUX:#define __INT_MAX__ 2147483647 // PPC-LINUX:#define __LDBL_DENORM_MIN__ 4.94065645841246544176568792868221e-324L @@ -875,7 +875,7 @@ // PPC-LINUX:#define __NO_INLINE__ 1 // PPC-LINUX:#define __POINTER_WIDTH__ 32 // PPC-LINUX:#define __POWERPC__ 1 -// PPC-LINUX:#define __PTRDIFF_TYPE__ long int +// PPC-LINUX:#define __PTRDIFF_TYPE__ int // PPC-LINUX:#define __PTRDIFF_WIDTH__ 32 // PPC-LINUX:#define __REGISTER_PREFIX__ // PPC-LINUX:#define __SCHAR_MAX__ 127