Apply -fdiscard-value-names patch
This commit is contained in:
parent
28cdc9893f
commit
b45d596d2f
99
0001-remark-diagnostics-codegen-Fix-PR44896.patch
Normal file
99
0001-remark-diagnostics-codegen-Fix-PR44896.patch
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
From 11857d49948b845dcfd7c7f78595095e3add012d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rong Xu <xur@google.com>
|
||||||
|
Date: Tue, 25 Feb 2020 08:04:01 -0800
|
||||||
|
Subject: [PATCH] [remark][diagnostics] [codegen] Fix PR44896
|
||||||
|
|
||||||
|
This patch fixes PR44896. For IR input files, option fdiscard-value-names
|
||||||
|
should be ignored as we need named values in loadModule().
|
||||||
|
Commit 60d3947922 sets this option after loadModule() where valued names
|
||||||
|
already created. This creates an inconsistent state in setNameImpl()
|
||||||
|
that leads to a seg fault.
|
||||||
|
This patch forces fdiscard-value-names to be false for IR input files.
|
||||||
|
|
||||||
|
This patch also emits a warning of "ignoring -fdiscard-value-names" if
|
||||||
|
option fdiscard-value-names is explictly enabled in the commandline for
|
||||||
|
IR input files.
|
||||||
|
|
||||||
|
Differential Revision: https://reviews.llvm.org/D74878
|
||||||
|
---
|
||||||
|
clang/include/clang/Basic/DiagnosticDriverKinds.td | 3 +++
|
||||||
|
clang/lib/CodeGen/CodeGenAction.cpp | 3 +++
|
||||||
|
clang/lib/Driver/ToolChains/Clang.cpp | 10 +++++++++-
|
||||||
|
clang/test/CodeGen/PR44896.ll | 15 +++++++++++++++
|
||||||
|
4 files changed, 30 insertions(+), 1 deletion(-)
|
||||||
|
create mode 100644 clang/test/CodeGen/PR44896.ll
|
||||||
|
|
||||||
|
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td
|
||||||
|
index ecd871e..48ece91 100644
|
||||||
|
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
|
||||||
|
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
|
||||||
|
@@ -271,6 +271,9 @@ def warn_drv_unsupported_debug_info_opt_for_target : Warning<
|
||||||
|
InGroup<UnsupportedTargetOpt>;
|
||||||
|
def warn_c_kext : Warning<
|
||||||
|
"ignoring -fapple-kext which is valid for C++ and Objective-C++ only">;
|
||||||
|
+def warn_ignoring_fdiscard_for_bitcode : Warning<
|
||||||
|
+ "ignoring -fdiscard-value-names for LLVM Bitcode">,
|
||||||
|
+ InGroup<UnusedCommandLineArgument>;
|
||||||
|
def warn_drv_input_file_unused : Warning<
|
||||||
|
"%0: '%1' input unused%select{ when '%3' is present|}2">,
|
||||||
|
InGroup<UnusedCommandLineArgument>;
|
||||||
|
diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp
|
||||||
|
index 5ebc34c..81946b1 100644
|
||||||
|
--- a/clang/lib/CodeGen/CodeGenAction.cpp
|
||||||
|
+++ b/clang/lib/CodeGen/CodeGenAction.cpp
|
||||||
|
@@ -1146,6 +1146,9 @@ void CodeGenAction::ExecuteAction() {
|
||||||
|
CI.getTargetOpts(), CI.getLangOpts(),
|
||||||
|
CI.getFrontendOpts().ShowTimers,
|
||||||
|
std::move(LinkModules), *VMContext, nullptr);
|
||||||
|
+ // PR44896: Force DiscardValueNames as false. DiscardValueNames cannot be
|
||||||
|
+ // true here because the valued names are needed for reading textual IR.
|
||||||
|
+ Ctx.setDiscardValueNames(false);
|
||||||
|
Ctx.setDiagnosticHandler(
|
||||||
|
std::make_unique<ClangDiagnosticHandler>(CodeGenOpts, &Result));
|
||||||
|
|
||||||
|
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
|
||||||
|
index 19a23c9..d387a1d 100644
|
||||||
|
--- a/clang/lib/Driver/ToolChains/Clang.cpp
|
||||||
|
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
|
||||||
|
@@ -4332,8 +4332,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
|
|
||||||
|
// Discard value names in assert builds unless otherwise specified.
|
||||||
|
if (Args.hasFlag(options::OPT_fdiscard_value_names,
|
||||||
|
- options::OPT_fno_discard_value_names, !IsAssertBuild))
|
||||||
|
+ options::OPT_fno_discard_value_names, !IsAssertBuild)) {
|
||||||
|
+ if (Args.hasArg(options::OPT_fdiscard_value_names) &&
|
||||||
|
+ (std::any_of(Inputs.begin(), Inputs.end(),
|
||||||
|
+ [](const clang::driver::InputInfo &II) {
|
||||||
|
+ return types::isLLVMIR(II.getType());
|
||||||
|
+ }))) {
|
||||||
|
+ D.Diag(diag::warn_ignoring_fdiscard_for_bitcode);
|
||||||
|
+ }
|
||||||
|
CmdArgs.push_back("-discard-value-names");
|
||||||
|
+ }
|
||||||
|
|
||||||
|
// Set the main file name, so that debug info works even with
|
||||||
|
// -save-temps.
|
||||||
|
diff --git a/clang/test/CodeGen/PR44896.ll b/clang/test/CodeGen/PR44896.ll
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..a4d3445
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/clang/test/CodeGen/PR44896.ll
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+; RUN: %clang -fdiscard-value-names -S %s -o /dev/null 2>&1 | FileCheck --check-prefix=WARNING %s
|
||||||
|
+; RUN: %clang -S %s -o /dev/null 2>&1 | FileCheck --check-prefix=NOWARNING %s
|
||||||
|
+; RUN: %clang_cc1 -S -emit-llvm %s -discard-value-names -o /dev/null
|
||||||
|
+; PR 44896
|
||||||
|
+
|
||||||
|
+; WARNING: ignoring -fdiscard-value-names for LLVM Bitcode
|
||||||
|
+; NOWARNING-NOT: ignoring -fdiscard-value-names for LLVM Bitcode
|
||||||
|
+
|
||||||
|
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
+target triple = "x86_64--linux-gnu"
|
||||||
|
+
|
||||||
|
+define linkonce i8* @b(i8* %a) {
|
||||||
|
+ ret i8* %a
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -4,7 +4,7 @@
|
|||||||
%global min_ver 0
|
%global min_ver 0
|
||||||
%global patch_ver 0
|
%global patch_ver 0
|
||||||
%global rc_ver 2
|
%global rc_ver 2
|
||||||
%global baserelease 0.3
|
%global baserelease 0.4
|
||||||
|
|
||||||
%global clang_tools_binaries \
|
%global clang_tools_binaries \
|
||||||
%{_bindir}/clang-apply-replacements \
|
%{_bindir}/clang-apply-replacements \
|
||||||
@ -88,6 +88,7 @@ Source4: https://prereleases.llvm.org/%{version}/hans-gpg-key.asc
|
|||||||
Patch4: 0002-gtest-reorg.patch
|
Patch4: 0002-gtest-reorg.patch
|
||||||
Patch11: 0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch
|
Patch11: 0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch
|
||||||
Patch13: 0001-Make-funwind-tables-the-default-for-all-archs.patch
|
Patch13: 0001-Make-funwind-tables-the-default-for-all-archs.patch
|
||||||
|
Patch14: 0001-remark-diagnostics-codegen-Fix-PR44896.patch
|
||||||
|
|
||||||
# Not Upstream
|
# Not Upstream
|
||||||
Patch15: 0001-clang-Don-t-install-static-libraries.patch
|
Patch15: 0001-clang-Don-t-install-static-libraries.patch
|
||||||
@ -237,6 +238,7 @@ pathfix.py -i %{__python3} -pn \
|
|||||||
%patch4 -p1 -b .gtest
|
%patch4 -p1 -b .gtest
|
||||||
%patch11 -p1 -b .libcxx-fix
|
%patch11 -p1 -b .libcxx-fix
|
||||||
%patch13 -p2 -b .unwind-all
|
%patch13 -p2 -b .unwind-all
|
||||||
|
%patch14 -p2 -b .discard-names
|
||||||
%patch15 -p2 -b .no-install-static
|
%patch15 -p2 -b .no-install-static
|
||||||
|
|
||||||
mv ../%{clang_tools_srcdir} tools/extra
|
mv ../%{clang_tools_srcdir} tools/extra
|
||||||
@ -456,6 +458,9 @@ LD_LIBRARY_PATH=%{buildroot}%{_libdir} ninja check-all -C _build || \
|
|||||||
|
|
||||||
%endif
|
%endif
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Feb 25 2020 sguelton@redhat.com - 10.0.0-0.4.rc2
|
||||||
|
- Apply -fdiscard-value-names patch.
|
||||||
|
|
||||||
* Mon Feb 17 2020 sguelton@redhat.com - 10.0.0-0.3.rc2
|
* Mon Feb 17 2020 sguelton@redhat.com - 10.0.0-0.3.rc2
|
||||||
- Fix NVR
|
- Fix NVR
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user