From 9228f64cc2ceb54764a302103e3b754c0b6235a2 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 13 Nov 2018 15:59:57 +0000 Subject: [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. 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. From-SVN: r266079 --- gcc/ChangeLog | 7 +++++++ gcc/ipa-inline.c | 14 ++++++++------ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/pr87955.c | 10 ++++++++++ 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr87955.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 18acf495a31..ddc99e3102f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-11-13 David Malcolm + + 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). + 2018-11-13 David Malcolm * doc/invoke.texi (-fsave-optimization-record): Note that the diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index e04ede774cf..173808a5603 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/ChangeLog b/gcc/testsuite/ChangeLog index 979f5978c49..d2f0fd3adc5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-11-13 David Malcolm + + PR ipa/87955 + * gcc.target/i386/pr87955.c: New test. + 2018-11-12 Aldy Hernandez * gcc.dg/tree-ssa/pr64130.c: Adjust for new value_range pretty diff --git a/gcc/testsuite/gcc.target/i386/pr87955.c b/gcc/testsuite/gcc.target/i386/pr87955.c new file mode 100644 index 00000000000..ed87da6d229 --- /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" } */ -- 2.30.2