From: Bob Wilson Date: Tue, 18 Jun 2013 05:36:04 +0000 (+0000) Subject: size_t on Darwin AAPCS targets is "unsigned long". X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e4bce7a4250e3d646ceab372ebed71ca7e79cf28;p=clang 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 --- 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)); +}