From 2877ad9ac28e1c7f0a6e643ca8f03f795e0f4985 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 25 Feb 2020 12:34:00 +0100 Subject: [PATCH] Fix link failure with debug info in LTO mode This fixes a regression whereby the program fails to link with debug info in LTO mode because of an undefined reference to a symbol coming from the object files containing the early debug info. * dwarf2out.c (dwarf2out_size_function): Run in early-DWARF mode. --- gcc/ChangeLog | 4 ++++ gcc/dwarf2out.c | 1 + gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gnat.dg/lto24.adb | 10 ++++++++++ gcc/testsuite/gnat.dg/lto24_pkg1.ads | 17 +++++++++++++++++ gcc/testsuite/gnat.dg/lto24_pkg2.adb | 8 ++++++++ gcc/testsuite/gnat.dg/lto24_pkg2.ads | 5 +++++ 7 files changed, 51 insertions(+) create mode 100644 gcc/testsuite/gnat.dg/lto24.adb create mode 100644 gcc/testsuite/gnat.dg/lto24_pkg1.ads create mode 100644 gcc/testsuite/gnat.dg/lto24_pkg2.adb create mode 100644 gcc/testsuite/gnat.dg/lto24_pkg2.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64120a91609..78191a6b8c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2019-02-25 Eric Botcazou + + * dwarf2out.c (dwarf2out_size_function): Run in early-DWARF mode. + 2020-02-25 Roman Zhuykov * doc/install.texi (--enable-checking): Adjust wording. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index fe46c7e1eee..1fcb19a0489 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -27610,6 +27610,7 @@ dwarf2out_inline_entry (tree block) static void dwarf2out_size_function (tree decl) { + set_early_dwarf s; function_to_dwarf_procedure (decl); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 10bbb73fc3d..3a22e8608df 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-02-25 Eric Botcazou + + * gnat.dg/lto24.adb: New test. + * gnat.dg/lto24_pkg1.ads: New helper. + * gnat.dg/lto24_pkg2.ad[sb]: Likewise. + 2020-02-25 Richard Biener * gcc.dg/tree-ssa/ssa-fre-86.c: New testcase. diff --git a/gcc/testsuite/gnat.dg/lto24.adb b/gcc/testsuite/gnat.dg/lto24.adb new file mode 100644 index 00000000000..998b4478254 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto24.adb @@ -0,0 +1,10 @@ +-- { dg-do link } +-- { dg-options "-O -g -flto" { target lto } } + +with Lto24_Pkg1; + +procedure Lto24 is + R : Lto24_Pkg1.Rec (False); +begin + R.Empty := True; +end; diff --git a/gcc/testsuite/gnat.dg/lto24_pkg1.ads b/gcc/testsuite/gnat.dg/lto24_pkg1.ads new file mode 100644 index 00000000000..abe7e911787 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto24_pkg1.ads @@ -0,0 +1,17 @@ +with Lto24_Pkg2; + +package Lto24_Pkg1 is + + Max_Elem : constant Natural := Lto24_Pkg2.Get; + + type Arr is array (Natural range <>) of Boolean; + + type Rec (B : Boolean) is record + I : Integer; + case B is + when True => A : Arr (1 .. Max_Elem); + when False => Empty : Boolean; + end case; + end record; + +end Lto24_Pkg1; diff --git a/gcc/testsuite/gnat.dg/lto24_pkg2.adb b/gcc/testsuite/gnat.dg/lto24_pkg2.adb new file mode 100644 index 00000000000..12fb34e5750 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto24_pkg2.adb @@ -0,0 +1,8 @@ +package body Lto24_Pkg2 is + + function Get return Natural is + begin + return 16; + end; + +end Lto24_Pkg2; diff --git a/gcc/testsuite/gnat.dg/lto24_pkg2.ads b/gcc/testsuite/gnat.dg/lto24_pkg2.ads new file mode 100644 index 00000000000..79a916ea0b7 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto24_pkg2.ads @@ -0,0 +1,5 @@ +package Lto24_Pkg2 is + + function Get return Natural; + +end Lto24_Pkg2; -- 2.30.2