aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2016-09-11 14:08:28 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2016-09-11 12:08:28 +0000
commite3912107f880de67f5f593212490a957d95801bb (patch)
tree7d2b301c8de09a1eadfd5183c9c931293a9269d5 /gcc
parent2501129262f37369070afc24a6505c3d4a3c6d44 (diff)
downloadgcc-e3912107f880de67f5f593212490a957d95801bb.zip
gcc-e3912107f880de67f5f593212490a957d95801bb.tar.gz
gcc-e3912107f880de67f5f593212490a957d95801bb.tar.bz2
re PR ipa/63416 (Three calls to empty functions via pointers get folded, but not inlined)
PR ipa/64316 * gcc.dg/ipa/pr63416.c: New testcase. From-SVN: r240081
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr63416.c56
2 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 337593b..8766abb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-08-09 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/64316
+ * gcc.dg/ipa/pr63416.c: New testcase.
+
2016-09-10 Paul Thomas <pault@gcc.gnu.org>
Steven G. Kargl <kargl@gcc.gnu.org>
diff --git a/gcc/testsuite/gcc.dg/ipa/pr63416.c b/gcc/testsuite/gcc.dg/ipa/pr63416.c
new file mode 100644
index 0000000..b5374c5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr63416.c
@@ -0,0 +1,56 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+#define _UNUSED_ __attribute__((__unused__))
+
+typedef int TEST_F30 (int *v);
+typedef void TEST_F31 (int *v);
+typedef void TEST_F32 (int *v, int r);
+
+typedef struct TEST_T30_ {
+ TEST_F30 * pf30;
+ TEST_F31 * pf31;
+ TEST_F32 * pf32;
+} TEST_T30;
+
+static inline
+int test_f30 (int *v)
+{
+ *v = 1;
+ return 0;
+}//test_f30()
+
+static inline
+void test_f31 (int *v _UNUSED_)
+{
+}//test_f31()
+
+static inline
+void test_f32 (int *v, int r _UNUSED_)
+{
+ *v = 0;
+}//test_f32()
+
+static const
+TEST_T30 test_t30 = {
+ .pf30 = test_f30,
+ .pf31 = test_f31,
+ .pf32 = test_f32,
+};
+
+static inline
+int test_f10 (const TEST_T30 *pt30, int *v)
+{
+ int r = pt30->pf30(v);
+ pt30->pf31(v);
+ pt30->pf32(v, r);
+ return 0;
+}//test_f10()
+
+int test_f00 (int *v)
+{
+ return test_f10(&test_t30, v);
+}//test_f00()
+
+/* Everything should be inlined and only test_f00 body should appear. */
+/* { dg-final { scan-tree-dump-not "test_f10" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "test_f3" "optimized" } } */