From e4bce7a4250e3d646ceab372ebed71ca7e79cf28 Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Tue, 18 Jun 2013 05:36:04 +0000 Subject: [PATCH] size_t on Darwin AAPCS targets is "unsigned long". Some embedded targets use ARM's AAPCS with iOS header files that define size_t as unsigned long, which conflicts with the usual AAPCS definition of size_t as unsigned int. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184171 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 3 +++ test/Sema/arm-darwin-aapcs.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 test/Sema/arm-darwin-aapcs.cpp diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 4e2d223c6b..744a437fde 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -3642,6 +3642,9 @@ public: // FIXME: Override "preferred align" for double and long long. } else if (Name == "aapcs" || Name == "aapcs-vfp") { + // size_t is unsigned long on Darwin. + if (getTriple().isOSDarwin()) + SizeType = UnsignedLong; IsAAPCS = true; // FIXME: Enumerated types are variable width in straight AAPCS. } else if (Name == "aapcs-linux") { diff --git a/test/Sema/arm-darwin-aapcs.cpp b/test/Sema/arm-darwin-aapcs.cpp new file mode 100644 index 0000000000..1359a1dc15 --- /dev/null +++ b/test/Sema/arm-darwin-aapcs.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 %s -triple thumbv7-apple-ios -target-abi aapcs -verify -fsyntax-only +// expected-no-diagnostics + +// ARM's AAPCS normally has size_t defined as unsigned int, but on Darwin +// some embedded targets use AAPCS with the iOS header files, which define +// size_t as unsigned long. Make sure that works. +typedef unsigned long size_t; +void* malloc(size_t); +void* operator new(size_t size) +{ + return (malloc(size)); +} -- 2.50.1