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 @@ -7903,6 +7903,12 @@ CmdArgs.push_back("-target-abi"); CmdArgs.push_back(ABIName.data()); + + if (Args.hasFlag(options::OPT_mdefault_build_attributes, + options::OPT_mno_default_build_attributes, true)) { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-riscv-add-build-attributes"); + } } void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, diff --git a/clang/test/Driver/riscv-default-build-attributes.s b/clang/test/Driver/riscv-default-build-attributes.s new file mode 100644 --- /dev/null +++ b/clang/test/Driver/riscv-default-build-attributes.s @@ -0,0 +1,20 @@ +//// Enabled by default for assembly +// RUN: %clang --target=riscv64 -### %s 2>&1 \ +// RUN: | FileCheck %s -check-prefix CHECK-ENABLED + +/// Can be forced on or off for assembly. +// RUN: %clang --target=riscv64 -### %s 2>&1 -mno-default-build-attributes \ +// RUN: | FileCheck %s -check-prefix CHECK-DISABLED +// RUN: %clang --target=riscv64 -### %s 2>&1 -mdefault-build-attributes \ +// RUN: | FileCheck %s -check-prefix CHECK-ENABLED + +/// Option ignored for C/C++ (since we always emit hardware and ABI build +/// attributes during codegen). +// RUN: %clang --target=riscv64 -### -x c %s -mdefault-build-attributes 2>&1 \ +// RUN: | FileCheck %s -check-prefix CHECK-DISABLED +// RUN: %clang --target=riscv64 -### -x c++ %s -mdefault-build-attributes 2>&1 \ +// RUN: | FileCheck %s -check-prefix CHECK-DISABLED + +// CHECK-DISABLED-NOT: "-riscv-add-build-attributes" +// CHECK-ENABLED: "-riscv-add-build-attributes" +// expected-warning {{argument unused during compilation: '-mno-default-build-attributes'}}