This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix ICE with -fopt-info-inline (PR ipa/87955)


PR ipa/87955 reports a problem I introduced in r265920, where I converted
the guard in report_inline_failed_reason from using:
  if (dump_file)
to using
  if (dump_enabled_p ()).
without updating the calls to cl_target_option_print_diff and
cl_optimization_print_diff, which assume that dump_file is non-NULL.

The functions are auto-generated.  Rather than porting them to the dump
API, this patch applies the workaround of adding the missing checks on
dump_file before calling them.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.

OK for trunk?

gcc/ChangeLog:
	PR ipa/87955
	* ipa-inline.c (report_inline_failed_reason): Guard calls to
	cl_target_option_print_diff and cl_optimization_print_diff with
	if (dump_file).

gcc/testsuite/ChangeLog:
	PR ipa/87955
	* gcc.target/i386/pr87955.c: New test.
---
 gcc/ipa-inline.c                        | 14 ++++++++------
 gcc/testsuite/gcc.target/i386/pr87955.c | 10 ++++++++++
 2 files changed, 18 insertions(+), 6 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr87955.c

diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index e04ede7..173808a 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -244,13 +244,15 @@ report_inline_failed_reason (struct cgraph_edge *e)
 			   e->callee->ultimate_alias_target ()->lto_file_data->file_name);
 	}
       if (e->inline_failed == CIF_TARGET_OPTION_MISMATCH)
-	cl_target_option_print_diff
-	 (dump_file, 2, target_opts_for_fn (e->caller->decl),
-          target_opts_for_fn (e->callee->ultimate_alias_target ()->decl));
+	if (dump_file)
+	  cl_target_option_print_diff
+	    (dump_file, 2, target_opts_for_fn (e->caller->decl),
+	     target_opts_for_fn (e->callee->ultimate_alias_target ()->decl));
       if (e->inline_failed == CIF_OPTIMIZATION_MISMATCH)
-	cl_optimization_print_diff
-	  (dump_file, 2, opts_for_fn (e->caller->decl),
-	   opts_for_fn (e->callee->ultimate_alias_target ()->decl));
+	if (dump_file)
+	  cl_optimization_print_diff
+	    (dump_file, 2, opts_for_fn (e->caller->decl),
+	     opts_for_fn (e->callee->ultimate_alias_target ()->decl));
     }
 }
 
diff --git a/gcc/testsuite/gcc.target/i386/pr87955.c b/gcc/testsuite/gcc.target/i386/pr87955.c
new file mode 100644
index 0000000..ed87da6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr87955.c
@@ -0,0 +1,10 @@
+/* { dg-options "-O2 -fopt-info-inline-missed" } */
+
+float a;
+
+__attribute__((__target__("fpmath=387")))
+int b() {
+  return a;
+}
+
+int c() { return b(); } /* { dg-missed "not inlinable: c/\[0-9\]* -> b/\[0-9\]*, target specific option mismatch" } */
-- 
1.8.5.3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]