MachO: set sizeof result type to what embedded headers expect.
authorTim Northover <tnorthover@apple.com>
Tue, 5 Aug 2014 11:07:26 +0000 (11:07 +0000)
committerTim Northover <tnorthover@apple.com>
Tue, 5 Aug 2014 11:07:26 +0000 (11:07 +0000)
Embedded systems seem to have inherited Darwin's choise of "unsigned long" for
size_t (via a bunch of headers), so we should respect that.

rdar://problem/17872787

llvm-svn: 214854

clang/lib/Basic/Targets.cpp
clang/test/Sema/arm-darwin-aapcs.cpp

index 034bb07..eae3698 100644 (file)
@@ -3596,8 +3596,8 @@ class ARMTargetInfo : public TargetInfo {
     DoubleAlign = LongLongAlign = LongDoubleAlign = SuitableAlign = 64;
     const llvm::Triple &T = getTriple();
 
-    // size_t is unsigned long on Darwin and NetBSD.
-    if (T.isOSDarwin() || T.getOS() == llvm::Triple::NetBSD)
+    // size_t is unsigned long on MachO-derived environments and NetBSD.
+    if (T.isOSBinFormatMachO() || T.getOS() == llvm::Triple::NetBSD)
       SizeType = UnsignedLong;
     else
       SizeType = UnsignedInt;
index 1359a1d..3a6082a 100644 (file)
@@ -1,4 +1,5 @@
 // RUN: %clang_cc1 %s -triple thumbv7-apple-ios -target-abi aapcs -verify -fsyntax-only
+// RUN: %clang_cc1 %s -triple thumbv7m-apple-macho -target-abi aapcs -verify -fsyntax-only
 // expected-no-diagnostics
 
 // ARM's AAPCS normally has size_t defined as unsigned int, but on Darwin