From cf8888829ae6978a43f943ba1c27065fdcbe7066 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 21 Jan 2019 11:37:20 -0800 Subject: [PATCH] Fix discriminators in metadata, rhbz#1668033 --- ...ant-part-discriminator-is-read-by-Me.patch | 60 +++++++++++++++++++ 0002-test-Fix-Assembler-debug-info.ll.patch | 28 +++++++++ llvm.spec | 8 ++- 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 0001-Ensure-that-variant-part-discriminator-is-read-by-Me.patch create mode 100644 0002-test-Fix-Assembler-debug-info.ll.patch diff --git a/0001-Ensure-that-variant-part-discriminator-is-read-by-Me.patch b/0001-Ensure-that-variant-part-discriminator-is-read-by-Me.patch new file mode 100644 index 0000000..d6380eb --- /dev/null +++ b/0001-Ensure-that-variant-part-discriminator-is-read-by-Me.patch @@ -0,0 +1,60 @@ +From 2ad5ac11b17dac347d29191872b2b3d601bbcd1f Mon Sep 17 00:00:00 2001 +From: Jonas Devlieghere +Date: Fri, 21 Sep 2018 12:03:14 +0000 +Subject: [PATCH 1/2] Ensure that variant part discriminator is read by + MetadataLoader + +https://reviews.llvm.org/D42082 introduced variant parts to debug info +in LLVM. Subsequent work on the Rust compiler has found a bug in that +patch; namely, there is a path in MetadataLoader that fails to restore +the discriminator. + +This patch fixes the bug. + +Patch by: Tom Tromey + +Differential revision: https://reviews.llvm.org/D52340 + +llvm-svn: 342725 +--- + llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 2 +- + llvm/test/Assembler/debug-variant-discriminator.ll | 14 ++++++++++++++ + 2 files changed, 15 insertions(+), 1 deletion(-) + create mode 100644 llvm/test/Assembler/debug-variant-discriminator.ll + +diff --git a/lib/Bitcode/Reader/MetadataLoader.cpp b/lib/Bitcode/Reader/MetadataLoader.cpp +index 011c41e2cecd..a7b542efc19e 100644 +--- a/lib/Bitcode/Reader/MetadataLoader.cpp ++++ b/lib/Bitcode/Reader/MetadataLoader.cpp +@@ -1308,7 +1308,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( + (Context, Tag, Name, File, Line, Scope, BaseType, + SizeInBits, AlignInBits, OffsetInBits, Flags, + Elements, RuntimeLang, VTableHolder, TemplateParams, +- Identifier)); ++ Identifier, Discriminator)); + if (!IsNotUsedInTypeRef && Identifier) + MetadataList.addTypeRef(*Identifier, *cast(CT)); + +diff --git a/test/Assembler/debug-variant-discriminator.ll b/test/Assembler/debug-variant-discriminator.ll +new file mode 100644 +index 000000000000..5be001cad6be +--- /dev/null ++++ b/test/Assembler/debug-variant-discriminator.ll +@@ -0,0 +1,14 @@ ++; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s ++; RUN: verify-uselistorder %s ++ ++; CHECK: !named = !{!0, !1, !2} ++!named = !{!0, !1, !2} ++ ++; CHECK: !0 = !DICompositeType(tag: DW_TAG_structure_type, name: "Outer", size: 64, align: 64, identifier: "Outer") ++; CHECK-NEXT: !1 = !DICompositeType(tag: DW_TAG_variant_part, scope: !0, size: 64, discriminator: !2) ++; CHECK-NEXT: !2 = !DIDerivedType(tag: DW_TAG_member, scope: !1, baseType: !3, size: 64, align: 64, flags: DIFlagArtificial) ++; CHECK-NEXT: !3 = !DIBasicType(name: "u64", size: 64, encoding: DW_ATE_unsigned) ++!0 = !DICompositeType(tag: DW_TAG_structure_type, name: "Outer", size: 64, align: 64, identifier: "Outer") ++!1 = !DICompositeType(tag: DW_TAG_variant_part, scope: !0, size: 64, discriminator: !2) ++!2 = !DIDerivedType(tag: DW_TAG_member, scope: !1, baseType: !3, size: 64, align: 64, flags: DIFlagArtificial) ++!3 = !DIBasicType(name: "u64", size: 64, encoding: DW_ATE_unsigned) +-- +2.20.1 + diff --git a/0002-test-Fix-Assembler-debug-info.ll.patch b/0002-test-Fix-Assembler-debug-info.ll.patch new file mode 100644 index 0000000..d022d97 --- /dev/null +++ b/0002-test-Fix-Assembler-debug-info.ll.patch @@ -0,0 +1,28 @@ +From 9bfebd6e47cb8513dcd7f7203f29489bdec7bfe4 Mon Sep 17 00:00:00 2001 +From: Jonas Devlieghere +Date: Fri, 21 Sep 2018 12:28:44 +0000 +Subject: [PATCH 2/2] [test] Fix Assembler/debug-info.ll + +Update Assembler/debug-info.ll to contain discriminator. + +llvm-svn: 342727 +--- + llvm/test/Assembler/debug-info.ll | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/Assembler/debug-info.ll b/test/Assembler/debug-info.ll +index 5dfb8cd93435..605afc3f1587 100644 +--- a/test/Assembler/debug-info.ll ++++ b/test/Assembler/debug-info.ll +@@ -83,7 +83,7 @@ + ; CHECK-NEXT: !32 = !DIFile(filename: "file", directory: "dir", checksumkind: CSK_MD5, checksum: "000102030405060708090a0b0c0d0e0f") + !35 = !DIFile(filename: "file", directory: "dir", checksumkind: CSK_MD5, checksum: "000102030405060708090a0b0c0d0e0f") + +-; CHECK-NEXT: !33 = !DICompositeType(tag: DW_TAG_variant_part, name: "A", scope: !14, size: 64) ++; CHECK-NEXT: !33 = !DICompositeType(tag: DW_TAG_variant_part, name: "A", scope: !14, size: 64, discriminator: !34) + ; CHECK-NEXT: !34 = !DIDerivedType(tag: DW_TAG_member, scope: !33, baseType: !35, size: 64, align: 64, flags: DIFlagArtificial) + ; CHECK-NEXT: !35 = !DIBasicType(name: "u64", size: 64, encoding: DW_ATE_unsigned) + !36 = !DICompositeType(tag: DW_TAG_variant_part, name: "A", scope: !16, size: 64, discriminator: !37) +-- +2.20.1 + diff --git a/llvm.spec b/llvm.spec index dedce8f..a9ddfec 100644 --- a/llvm.spec +++ b/llvm.spec @@ -55,7 +55,7 @@ Name: %{pkg_name} Version: %{maj_ver}.%{min_ver}.%{patch_ver} -Release: 1%{?rc_ver:.rc%{rc_ver}}%{?dist} +Release: 2%{?rc_ver:.rc%{rc_ver}}%{?dist} Summary: The Low Level Virtual Machine License: NCSA @@ -73,6 +73,9 @@ Patch12: 0001-unittests-Don-t-install-TestPlugin.so.patch Patch14: 0001-CMake-Don-t-prefer-python2.7.patch Patch15: 0001-Don-t-set-rpath-when-installing.patch +Patch16: 0001-Ensure-that-variant-part-discriminator-is-read-by-Me.patch +Patch17: 0002-test-Fix-Assembler-debug-info.ll.patch + BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: cmake @@ -447,6 +450,9 @@ fi %endif %changelog +* Mon Jan 21 2019 Josh Stone - 7.0.1-2 +- Fix discriminators in metadata, rhbz#1668033 + * Mon Dec 17 2018 sguelton@redhat.com - 7.0.1-1 - 7.0.1 release