aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2016-11-13 17:23:13 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2016-11-13 17:23:13 +0000
commit4ebd491f2aed6d174c976f07d67c4b957f71391d (patch)
treef5dc01253c7a1ada57f4da8b6fd5f30f629cbe91 /gcc
parent499266dc40a12b9a7923ebe5f0b89a2aaa838da9 (diff)
downloadgcc-4ebd491f2aed6d174c976f07d67c4b957f71391d.zip
gcc-4ebd491f2aed6d174c976f07d67c4b957f71391d.tar.gz
gcc-4ebd491f2aed6d174c976f07d67c4b957f71391d.tar.bz2
ipa-icf.c (sem_function::merge): Do not create a wrapper also if the original function needs a static chain.
* ipa-icf.c (sem_function::merge): Do not create a wrapper also if the original function needs a static chain. From-SVN: r242354
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ipa-icf.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gnat.dg/lto21.adb10
-rw-r--r--gcc/testsuite/gnat.dg/lto21_pkg1.ads10
-rw-r--r--gcc/testsuite/gnat.dg/lto21_pkg2.adb30
-rw-r--r--gcc/testsuite/gnat.dg/lto21_pkg2.ads5
7 files changed, 69 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 68cc9c6..0be6661 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-11-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ipa-icf.c (sem_function::merge): Do not create a wrapper also if the
+ original function needs a static chain.
+
2016-11-13 David Edelsohn <dje.gcc@gmail.com>
PR target/78336
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index e8880cb..1ab67f3 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -1186,11 +1186,12 @@ sem_function::merge (sem_item *alias_item)
fprintf (dump_file,
"Wrapper cannot be created because of COMDAT\n");
}
- else if (DECL_STATIC_CHAIN (alias->decl))
+ else if (DECL_STATIC_CHAIN (alias->decl)
+ || DECL_STATIC_CHAIN (original->decl))
{
if (dump_file)
fprintf (dump_file,
- "Can not create wrapper of nested functions.\n");
+ "Cannot create wrapper of nested function.\n");
}
/* TODO: We can also deal with variadic functions never calling
VA_START. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 99bb0d4b..37ddec7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2016-11-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/lto21.adb: New test.
+ * gnat.dg/lto21_pkg1.ads: New helper.
+ * gnat.dg/lto21_pkg2.ad[sb]: Likewise.
+
2016-11-13 Janus Weil <janus@gcc.gnu.org>
PR fortran/60952
diff --git a/gcc/testsuite/gnat.dg/lto21.adb b/gcc/testsuite/gnat.dg/lto21.adb
new file mode 100644
index 0000000..fe6fb273
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21.adb
@@ -0,0 +1,10 @@
+-- { dg-do run }
+-- { dg-options "-O3 -flto" { target lto } }
+
+with Lto21_Pkg1;
+with Lto21_Pkg2; use Lto21_Pkg2;
+
+procedure Lto21 is
+begin
+ Proc;
+end;
diff --git a/gcc/testsuite/gnat.dg/lto21_pkg1.ads b/gcc/testsuite/gnat.dg/lto21_pkg1.ads
new file mode 100644
index 0000000..000a568
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21_pkg1.ads
@@ -0,0 +1,10 @@
+with Ada.Containers.Vectors;
+with Lto21_Pkg2;
+
+package Lto21_Pkg1 is
+
+ pragma Suppress (Tampering_Check);
+
+ package Vect1 is new Ada.Containers.Vectors (Positive, Natural);
+
+end Lto21_Pkg1;
diff --git a/gcc/testsuite/gnat.dg/lto21_pkg2.adb b/gcc/testsuite/gnat.dg/lto21_pkg2.adb
new file mode 100644
index 0000000..5d38102
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21_pkg2.adb
@@ -0,0 +1,30 @@
+with Ada.Containers; use Ada.Containers;
+with Ada.Containers.Hashed_Maps;
+with Ada.Containers.Vectors;
+
+package body Lto21_Pkg2 is
+
+ pragma Suppress (Tampering_Check);
+
+ procedure Proc is
+
+ function Hash (Syd : Natural) return Hash_Type is (Hash_Type'Mod (Syd));
+
+ package Vect2 is new Vectors (Positive, Natural);
+
+ package Maps is
+ new Hashed_Maps (Natural, Vect2.Vector, Hash, "=", Vect2."=");
+
+ procedure Nested (M : Maps.Map) is
+ use Maps;
+ procedure Inner (Position : Cursor) is null;
+ begin
+ Iterate (M, Inner'Access);
+ end;
+
+ M : Maps.Map;
+ begin
+ Nested (M);
+ end;
+
+end Lto21_Pkg2;
diff --git a/gcc/testsuite/gnat.dg/lto21_pkg2.ads b/gcc/testsuite/gnat.dg/lto21_pkg2.ads
new file mode 100644
index 0000000..935b3b7
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21_pkg2.ads
@@ -0,0 +1,5 @@
+package Lto21_Pkg2 is
+
+ procedure Proc;
+
+end Lto21_Pkg2;