Author: Ian Anderson Date: 2025-01-10T15:50:54-08:00 New Revision: 8a1174f06cb69c92290a2231ede0e2a8e8460e0c
URL: https://github.com/llvm/llvm-project/commit/8a1174f06cb69c92290a2231ede0e2a8e8460e0c DIFF: https://github.com/llvm/llvm-project/commit/8a1174f06cb69c92290a2231ede0e2a8e8460e0c.diff LOG: [Darwin][Driver][clang] arm64-apple-none-macho is missing the Apple macros from arm-apple-none-macho (#122427) arm-apple-none-macho uses DarwinTargetInfo which provides several Apple specific macros. arm64-apple-none-macho however just uses the generic AArch64leTargetInfo and doesn't get any of those macros. It's not clear if everything from DarwinTargetInfo is desirable for arm64-apple-none-macho, so make an AppleMachOTargetInfo to hold the generic Apple macros and a few other basic things. Added: clang/test/Preprocessor/darwin-predefines.c Modified: clang/lib/Basic/Targets.cpp clang/lib/Basic/Targets/AArch64.cpp clang/lib/Basic/Targets/AArch64.h clang/lib/Basic/Targets/ARM.cpp clang/lib/Basic/Targets/ARM.h clang/lib/Basic/Targets/OSTargets.cpp clang/lib/Basic/Targets/OSTargets.h clang/lib/Basic/Targets/X86.h clang/lib/Frontend/InitPreprocessor.cpp clang/test/Preprocessor/macho-embedded-predefines.c Removed: ################################################################################ diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index f40b81c02eb7ec..fad3de217d81b0 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -135,11 +135,15 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::aarch64_32: if (Triple.isOSDarwin()) return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts); + else if (Triple.isAppleMachO()) + return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts); return nullptr; case llvm::Triple::aarch64: if (Triple.isOSDarwin()) return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts); + else if (Triple.isAppleMachO()) + return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts); switch (os) { case llvm::Triple::FreeBSD: @@ -243,6 +247,8 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::thumbeb: if (Triple.isOSDarwin()) return std::make_unique<DarwinARMTargetInfo>(Triple, Opts); + else if (Triple.isAppleMachO()) + return std::make_unique<AppleMachOARMTargetInfo>(Triple, Opts); switch (os) { case llvm::Triple::Linux: @@ -531,6 +537,8 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::x86: if (Triple.isOSDarwin()) return std::make_unique<DarwinI386TargetInfo>(Triple, Opts); + else if (Triple.isAppleMachO()) + return std::make_unique<AppleMachOI386TargetInfo>(Triple, Opts); switch (os) { case llvm::Triple::Linux: { diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index 2b4b954d0c27ad..1bf58661d0efcd 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -1671,6 +1671,10 @@ MinGWARM64TargetInfo::MinGWARM64TargetInfo(const llvm::Triple &Triple, TheCXXABI.set(TargetCXXABI::GenericAArch64); } +AppleMachOAArch64TargetInfo::AppleMachOAArch64TargetInfo( + const llvm::Triple &Triple, const TargetOptions &Opts) + : AppleMachOTargetInfo<AArch64leTargetInfo>(Triple, Opts) {} + DarwinAArch64TargetInfo::DarwinAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) : DarwinTargetInfo<AArch64leTargetInfo>(Triple, Opts) { @@ -1695,9 +1699,9 @@ DarwinAArch64TargetInfo::DarwinAArch64TargetInfo(const llvm::Triple &Triple, TheCXXABI.set(TargetCXXABI::AppleARM64); } -void DarwinAArch64TargetInfo::getOSDefines(const LangOptions &Opts, - const llvm::Triple &Triple, - MacroBuilder &Builder) const { +void clang::targets::getAppleMachOAArch64Defines(MacroBuilder &Builder, + const LangOptions &Opts, + const llvm::Triple &Triple) { Builder.defineMacro("__AARCH64_SIMD__"); if (Triple.isArch32Bit()) Builder.defineMacro("__ARM64_ARCH_8_32__"); @@ -1710,7 +1714,20 @@ void DarwinAArch64TargetInfo::getOSDefines(const LangOptions &Opts, if (Triple.isArm64e()) Builder.defineMacro("__arm64e__", "1"); +} +void AppleMachOAArch64TargetInfo::getOSDefines(const LangOptions &Opts, + const llvm::Triple &Triple, + MacroBuilder &Builder) const { + getAppleMachOAArch64Defines(Builder, Opts, Triple); + AppleMachOTargetInfo<AArch64leTargetInfo>::getOSDefines(Opts, Triple, + Builder); +} + +void DarwinAArch64TargetInfo::getOSDefines(const LangOptions &Opts, + const llvm::Triple &Triple, + MacroBuilder &Builder) const { + getAppleMachOAArch64Defines(Builder, Opts, Triple); DarwinTargetInfo<AArch64leTargetInfo>::getOSDefines(Opts, Triple, Builder); } diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h index 4e927c0953b1fc..cedf3286806ac9 100644 --- a/clang/lib/Basic/Targets/AArch64.h +++ b/clang/lib/Basic/Targets/AArch64.h @@ -306,6 +306,20 @@ class LLVM_LIBRARY_VISIBILITY AArch64beTargetInfo : public AArch64TargetInfo { void setDataLayout() override; }; +void getAppleMachOAArch64Defines(MacroBuilder &Builder, const LangOptions &Opts, + const llvm::Triple &Triple); + +class LLVM_LIBRARY_VISIBILITY AppleMachOAArch64TargetInfo + : public AppleMachOTargetInfo<AArch64leTargetInfo> { +public: + AppleMachOAArch64TargetInfo(const llvm::Triple &Triple, + const TargetOptions &Opts); + +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override; +}; + class LLVM_LIBRARY_VISIBILITY DarwinAArch64TargetInfo : public DarwinTargetInfo<AArch64leTargetInfo> { public: diff --git a/clang/lib/Basic/Targets/ARM.cpp b/clang/lib/Basic/Targets/ARM.cpp index 370444057b4298..61ee26d8863832 100644 --- a/clang/lib/Basic/Targets/ARM.cpp +++ b/clang/lib/Basic/Targets/ARM.cpp @@ -1479,6 +1479,16 @@ void CygwinARMTargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("_GNU_SOURCE"); } +AppleMachOARMTargetInfo::AppleMachOARMTargetInfo(const llvm::Triple &Triple, + const TargetOptions &Opts) + : AppleMachOTargetInfo<ARMleTargetInfo>(Triple, Opts) {} + +void AppleMachOARMTargetInfo::getOSDefines(const LangOptions &Opts, + const llvm::Triple &Triple, + MacroBuilder &Builder) const { + getAppleMachODefines(Builder, Opts, Triple); +} + DarwinARMTargetInfo::DarwinARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) : DarwinTargetInfo<ARMleTargetInfo>(Triple, Opts) { diff --git a/clang/lib/Basic/Targets/ARM.h b/clang/lib/Basic/Targets/ARM.h index 55ecb99d82d8fb..fdb40c3d41918a 100644 --- a/clang/lib/Basic/Targets/ARM.h +++ b/clang/lib/Basic/Targets/ARM.h @@ -300,6 +300,17 @@ class LLVM_LIBRARY_VISIBILITY CygwinARMTargetInfo : public ARMleTargetInfo { MacroBuilder &Builder) const override; }; +class LLVM_LIBRARY_VISIBILITY AppleMachOARMTargetInfo + : public AppleMachOTargetInfo<ARMleTargetInfo> { +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override; + +public: + AppleMachOARMTargetInfo(const llvm::Triple &Triple, + const TargetOptions &Opts); +}; + class LLVM_LIBRARY_VISIBILITY DarwinARMTargetInfo : public DarwinTargetInfo<ARMleTargetInfo> { protected: diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp index 6f98353fb8c2e4..bf10f9a725567d 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -19,19 +19,17 @@ using namespace clang::targets; namespace clang { namespace targets { -void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, - const llvm::Triple &Triple, StringRef &PlatformName, - VersionTuple &PlatformMinVersion) { +void getAppleMachODefines(MacroBuilder &Builder, const LangOptions &Opts, + const llvm::Triple &Triple) { Builder.defineMacro("__APPLE_CC__", "6000"); Builder.defineMacro("__APPLE__"); - Builder.defineMacro("__STDC_NO_THREADS__"); // AddressSanitizer doesn't play well with source fortification, which is on - // by default on Darwin. + // by default on Apple platforms. if (Opts.Sanitize.has(SanitizerKind::Address)) Builder.defineMacro("_FORTIFY_SOURCE", "0"); - // Darwin defines __weak, __strong, and __unsafe_unretained even in C mode. + // Apple defines __weak, __strong, and __unsafe_unretained even in C mode. if (!Opts.ObjC) { // __weak is always defined, for use in blocks and with objc pointers. Builder.defineMacro("__weak", "__attribute__((objc_gc(weak)))"); @@ -47,6 +45,22 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, if (Opts.POSIXThreads) Builder.defineMacro("_REENTRANT"); + // __MACH__ originally meant "will run in a Mach kernel based OS", but it has + // come to also mean "uses Apple Mach-O linking/symbol visibility semantics". + // Notably libc++'s __configuration/platform.h and Swift's shims/Visibility.h + // take __MACH__ for the more general meaning. + if (Triple.isAppleMachO() || Triple.isOSDarwin()) + Builder.defineMacro("__MACH__"); +} + +void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, + const llvm::Triple &Triple, StringRef &PlatformName, + VersionTuple &PlatformMinVersion) { + getAppleMachODefines(Builder, Opts, Triple); + + // Darwin's libc doesn't have threads.h + Builder.defineMacro("__STDC_NO_THREADS__"); + // Get the platform type and version number from the triple. VersionTuple OsVersion; if (Triple.isMacOSX()) { diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index b8d9a5725d0127..ba9acc8b2a05c6 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -34,12 +34,39 @@ class LLVM_LIBRARY_VISIBILITY OSTargetInfo : public TgtInfo { } }; +void getAppleMachODefines(MacroBuilder &Builder, const LangOptions &Opts, + const llvm::Triple &Triple); + void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple, StringRef &PlatformName, VersionTuple &PlatformMinVersion); template <typename Target> -class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo : public OSTargetInfo<Target> { +class LLVM_LIBRARY_VISIBILITY AppleMachOTargetInfo + : public OSTargetInfo<Target> { +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override { + getAppleMachODefines(Builder, Opts, Triple); + } + +public: + AppleMachOTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) + : OSTargetInfo<Target>(Triple, Opts) {} + + const char *getStaticInitSectionSpecifier() const override { + return "__TEXT,__StaticInit,regular,pure_instructions"; + } + + /// Apple Mach-O does not support protected visibility. Its "default" is very + /// similar to ELF's "protected"; Apple Mach-O requires a "weak" attribute on + /// declarations that can be dynamically replaced. + bool hasProtectedVisibility() const override { return false; } +}; + +template <typename Target> +class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo + : public AppleMachOTargetInfo<Target> { protected: void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override { @@ -49,7 +76,7 @@ class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo : public OSTargetInfo<Target> { public: DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) - : OSTargetInfo<Target>(Triple, Opts) { + : AppleMachOTargetInfo<Target>(Triple, Opts) { // By default, no TLS, and we list permitted architecture/OS // combinations. this->TLSSupported = false; @@ -82,14 +109,9 @@ class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo : public OSTargetInfo<Target> { const char *getStaticInitSectionSpecifier() const override { // FIXME: We should return 0 when building kexts. - return "__TEXT,__StaticInit,regular,pure_instructions"; + return AppleMachOTargetInfo<Target>::getStaticInitSectionSpecifier(); } - /// Darwin does not support protected visibility. Darwin's "default" - /// is very similar to ELF's "protected"; Darwin requires a "weak" - /// attribute on declarations that can be dynamically replaced. - bool hasProtectedVisibility() const override { return false; } - unsigned getExnObjectAlignment() const override { // Older versions of libc++abi guarantee an alignment of only 8-bytes for // exception objects because of a bug in __cxa_exception that was diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 35aceb1c58e142..2c200e64a3d84d 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -534,6 +534,14 @@ class LLVM_LIBRARY_VISIBILITY OpenBSDI386TargetInfo } }; +class LLVM_LIBRARY_VISIBILITY AppleMachOI386TargetInfo + : public AppleMachOTargetInfo<X86_32TargetInfo> { +public: + AppleMachOI386TargetInfo(const llvm::Triple &Triple, + const TargetOptions &Opts) + : AppleMachOTargetInfo<X86_32TargetInfo>(Triple, Opts) {} +}; + class LLVM_LIBRARY_VISIBILITY DarwinI386TargetInfo : public DarwinTargetInfo<X86_32TargetInfo> { public: diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 8eba766f21a640..29723b573e771a 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -1507,11 +1507,6 @@ static void InitializePredefinedMacros(const TargetInfo &TI, // ELF targets define __ELF__ if (TI.getTriple().isOSBinFormatELF()) Builder.defineMacro("__ELF__"); - else if (TI.getTriple().isAppleMachO()) - // Apple MachO targets define __MACH__ even when not using DarwinTargetInfo. - // Hurd will also define this in some circumstances, but that's done in - // HurdTargetInfo. Windows targets don't define this. - Builder.defineMacro("__MACH__"); // Target OS macro definitions. if (PPOpts.DefineTargetOSMacros) { diff --git a/clang/test/Preprocessor/darwin-predefines.c b/clang/test/Preprocessor/darwin-predefines.c new file mode 100644 index 00000000000000..c76eba6db1b6b7 --- /dev/null +++ b/clang/test/Preprocessor/darwin-predefines.c @@ -0,0 +1,83 @@ +// RUN: %clang_cc1 -E -dM -triple arm64-apple-macosx15.0.0 -target-cpu apple-m1 %s | FileCheck %s -check-prefix CHECK-MACOSX + +// CHECK-MACOSX: #define __APPLE_CC__ +// CHECK-MACOSX: #define __APPLE__ +// CHECK-MACOSX: #define __ARM_64BIT_STATE 1 +// CHECK-MACOSX-NOT: #define __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ +// CHECK-MACOSX-NOT: #define __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ +// CHECK-MACOSX: #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ 150000 +// CHECK-MACOSX: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ 150000 +// CHECK-MACOSX-NOT: #define __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ +// CHECK-MACOSX-NOT: #define __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ +// CHECK-MACOSX: #define __MACH__ +// CHECK-MACOSX: #define __STDC_NO_THREADS__ + +// RUN: %clang_cc1 -E -dM -triple arm64-apple-ios18.0.0 -target-cpu apple-a7 %s | FileCheck %s -check-prefix CHECK-IOS + +// CHECK-IOS: #define __APPLE_CC__ +// CHECK-IOS: #define __APPLE__ +// CHECK-IOS: #define __ARM_64BIT_STATE 1 +// CHECK-IOS-NOT: #define __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ +// CHECK-IOS: #define __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ 180000 +// CHECK-IOS-NOT: #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +// CHECK-IOS: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ 180000 +// CHECK-IOS-NOT: #define __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ +// CHECK-IOS-NOT: #define __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ +// CHECK-IOS: #define __MACH__ +// CHECK-IOS: #define __STDC_NO_THREADS__ + +// RUN: %clang_cc1 -E -dM -triple arm64-apple-watchos11.0.0 -target-cpu apple-s4 %s | FileCheck %s -check-prefix CHECK-WATCHOS + +// CHECK-WATCHOS: #define __APPLE_CC__ +// CHECK-WATCHOS: #define __APPLE__ +// CHECK-WATCHOS: #define __ARM_64BIT_STATE 1 +// CHECK-WATCHOS-NOT: #define __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ +// CHECK-WATCHOS-NOT: #define __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ +// CHECK-WATCHOS-NOT: #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +// CHECK-WATCHOS: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ 110000 +// CHECK-WATCHOS-NOT: #define __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ +// CHECK-WATCHOS: #define __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ 110000 +// CHECK-WATCHOS: #define __MACH__ +// CHECK-WATCHOS: #define __STDC_NO_THREADS__ + +// RUN: %clang_cc1 -E -dM -triple arm64-apple-tvos18.0.0 -target-cpu apple-a7 %s | FileCheck %s -check-prefix CHECK-TVOS + +// CHECK-TVOS: #define __APPLE_CC__ +// CHECK-TVOS: #define __APPLE__ +// CHECK-TVOS: #define __ARM_64BIT_STATE 1 +// CHECK-TVOS-NOT: #define __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ +// CHECK-TVOS-NOT: #define __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ +// CHECK-TVOS-NOT: #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +// CHECK-TVOS: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ 180000 +// CHECK-TVOS: #define __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ 180000 +// CHECK-TVOS-NOT: #define __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ +// CHECK-TVOS: #define __MACH__ +// CHECK-TVOS: #define __STDC_NO_THREADS__ + +// RUN: %clang_cc1 -E -dM -triple arm64-apple-driverkit24.0.0 -target-cpu apple-a7 %s | FileCheck %s -check-prefix CHECK-DRIVERKIT + +// CHECK-DRIVERKIT: #define __APPLE_CC__ +// CHECK-DRIVERKIT: #define __APPLE__ +// CHECK-DRIVERKIT: #define __ARM_64BIT_STATE 1 +// CHECK-DRIVERKIT: #define __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ 240000 +// CHECK-DRIVERKIT-NOT: #define __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ +// CHECK-DRIVERKIT-NOT: #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +// CHECK-DRIVERKIT: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ 240000 +// CHECK-DRIVERKIT-NOT: #define __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ +// CHECK-DRIVERKIT-NOT: #define __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ +// CHECK-DRIVERKIT: #define __MACH__ +// CHECK-DRIVERKIT: #define __STDC_NO_THREADS__ + +// RUN: %clang_cc1 -E -dM -triple arm64-apple-xros2.0.0 -target-cpu apple-a12 %s | FileCheck %s -check-prefix CHECK-XROS + +// CHECK-XROS: #define __APPLE_CC__ +// CHECK-XROS: #define __APPLE__ +// CHECK-XROS: #define __ARM_64BIT_STATE 1 +// CHECK-XROS-NOT: #define __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ +// CHECK-XROS-NOT: #define __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ +// CHECK-XROS-NOT: #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +// CHECK-XROS: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ 20000 +// CHECK-XROS-NOT: #define __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ +// CHECK-XROS-NOT: #define __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ +// CHECK-XROS: #define __MACH__ +// CHECK-XROS: #define __STDC_NO_THREADS__ diff --git a/clang/test/Preprocessor/macho-embedded-predefines.c b/clang/test/Preprocessor/macho-embedded-predefines.c index a7e5777a89a980..80a85eaa973e96 100644 --- a/clang/test/Preprocessor/macho-embedded-predefines.c +++ b/clang/test/Preprocessor/macho-embedded-predefines.c @@ -1,20 +1,43 @@ +// RUN: %clang_cc1 -E -dM -triple arm64-apple-none-macho -target-cpu generic %s | FileCheck %s -check-prefix CHECK-64 + +// CHECK-64: #define __APPLE_CC__ +// CHECK-64: #define __APPLE__ +// CHECK-64: #define __ARM_64BIT_STATE 1 +// CHECK-64-NOT: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ +// CHECK-64: #define __MACH__ +// CHECK-64-NOT: #define __STDC_NO_THREADS__ + // RUN: %clang_cc1 -E -dM -triple thumbv7m-apple-unknown-macho -target-cpu cortex-m3 %s | FileCheck %s -check-prefix CHECK-7M // CHECK-7M: #define __APPLE_CC__ // CHECK-7M: #define __APPLE__ // CHECK-7M: #define __ARM_ARCH_7M__ +// CHECK-7M-NOT: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ // CHECK-7M: #define __MACH__ +// CHECK-7M: #define __STDC_NO_THREADS__ // RUN: %clang_cc1 -E -dM -triple thumbv7em-apple-unknown-macho -target-cpu cortex-m4 %s | FileCheck %s -check-prefix CHECK-7EM // CHECK-7EM: #define __APPLE_CC__ // CHECK-7EM: #define __APPLE__ // CHECK-7EM: #define __ARM_ARCH_7EM__ +// CHECK-7EM-NOT: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ // CHECK-7EM: #define __MACH__ +// CHECK-7EM: #define __STDC_NO_THREADS__ // RUN: %clang_cc1 -E -dM -triple thumbv6m-apple-unknown-macho -target-cpu cortex-m0 %s | FileCheck %s -check-prefix CHECK-6M // CHECK-6M: #define __APPLE_CC__ // CHECK-6M: #define __APPLE__ // CHECK-6M: #define __ARM_ARCH_6M__ +// CHECK-6M-NOT: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ // CHECK-6M: #define __MACH__ +// CHECK-6M: #define __STDC_NO_THREADS__ + +// RUN: %clang_cc1 -E -dM -triple x86_64-pc-windows-macho -target-cpu x86-64 %s | FileCheck %s -check-prefix CHECK-WINDOWS + +// CHECK-WINDOWS: #define __APPLE_CC__ +// CHECK-WINDOWS: #define __APPLE__ +// CHECK-WINDOWS-NOT: #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ +// CHECK-WINDOWS-NOT: #define __MACH__ +// CHECK-WINDOWS: #define __STDC_NO_THREADS__ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits