diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7494,7 +7494,7 @@ CmdArgs.push_back("-outline-atomics"); } } - } else if (Triple.isAArch64() && + } else if (!Freestanding && Triple.isAArch64() && getToolChain().IsAArch64OutlineAtomicsDefault(Args)) { CmdArgs.push_back("-target-feature"); CmdArgs.push_back("+outline-atomics"); diff --git a/clang/test/Driver/aarch64-features.c b/clang/test/Driver/aarch64-features.c --- a/clang/test/Driver/aarch64-features.c +++ b/clang/test/Driver/aarch64-features.c @@ -32,6 +32,12 @@ // RUN: %clang --target=arm64-unknown-linux -rtlib=compiler-rt \ // RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s +// RUN: %clang --target=aarch64-linux-gnu -rtlib=compiler-rt -ffreestanding \ +// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s + +// RUN: %clang --target=arm64-unknown-linux -rtlib=compiler-rt -ffreestanding \ +// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s + // RUN: %clang --target=aarch64 -rtlib=compiler-rt \ // RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s