[Bug tree-optimization/86636] [9 Regression] ICE in json::string::string
dmalcolm at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 24 16:10:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86636
--- Comment #3 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Tue Jul 24 16:06:58 2018
New Revision: 262950
URL: https://gcc.gnu.org/viewcvs?rev=262950&root=gcc&view=rev
Log:
Fix segfault in -fsave-optimization-record (PR tree-optimization/86636)
There are various ways that it's possible for a gimple statement to
have an UNKNOWN_LOCATION, and for that UNKNOWN_LOCATION to be wrapped
in an ad-hoc location to capture inlining information.
For such a location, LOCATION_FILE (loc) is NULL.
Various places in -fsave-optimization-record were checking for
loc != UNKNOWN_LOCATION
and were passing LOCATION_FILE (loc) to code that assumed a non-NULL
filename, thus leading to segfaults for the above cases.
This patch updates the tests to use
LOCATION_LOCUS (loc) != UNKNOWN_LOCATION
instead, to look through ad-hoc location wrappers, fixing the segfaults.
It also adds various assertions to the affected code.
gcc/ChangeLog:
PR tree-optimization/86636
* json.cc (json::object::set): Fix comment. Add assertions.
(json::array::append): Move here from json.h. Add comment and an
assertion.
(json::string::string): Likewise.
* json.h (json::array::append): Move to json.cc.
(json::string::string): Likewise.
* optinfo-emit-json.cc
(optrecord_json_writer::impl_location_to_json): Assert that we
aren't attempting to write out UNKNOWN_LOCATION, or an ad-hoc
wrapper around it. Expand the location once, rather than three
times.
(optrecord_json_writer::inlining_chain_to_json): Fix the check for
UNKNOWN_LOCATION, to use LOCATION_LOCUS to look through ad-hoc
wrappers.
(optrecord_json_writer::optinfo_to_json): Likewise, in four
places. Fix some overlong lines.
gcc/testsuite/ChangeLog:
PR tree-optimization/86636
* gcc.c-torture/compile/pr86636.c: New test.
Added:
trunk/gcc/testsuite/gcc.c-torture/compile/pr86636.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/json.cc
trunk/gcc/json.h
trunk/gcc/optinfo-emit-json.cc
trunk/gcc/testsuite/ChangeLog
More information about the Gcc-bugs
mailing list