Created attachment 32722 [details] Preprocssed file to reproduce bug Data flow analysis in variable tracking does not converge and causes an infinite loop with the attached file and following compile options: ./cc1plus -quiet -fpreprocessed qmltextgenerator.ii -dumpbase qmltextgenerator.ii -march=armv4t -mfloat-abi=soft -mtls-dialect=gnu -auxbase-strip x.o -g -O2 -Wformat=1 -Werror=format-security -Wall -Wextra -version -fstack-protector -fvisibility=hidden -fvisibility-inlines-hidden -fPIC --param ssp-buffer-size=4 -o qmltextgenerator.s GCC configured with --target=arm-linux-gnueabi
Confirmed with arm-none-eabi as well.
Assigned to myself as Michael does not have a GCC developer account yet. Michael is the one working on this bug.
*** Bug 62013 has been marked as a duplicate of this bug. ***
Filling in some fields, this still fails on the 4.8 and 4.9 branches but works on trunk.
Created attachment 33244 [details] Reduced test case $ arm-unknown-linux-gnueabihf-gcc -S -O2 -g reduced1.cpp
git bisect points to r211625 as the revision which fixes/hides this bug on trunk. 2014-06-13 Richard Biener <rguenther@suse.de> * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Rewrite to propagate the VN result into all uses where possible and to remove stmts becoming dead because of that. (eliminate): Generalize stmt removal handling, remove in reverse dominator order to support proper debug stmt generation. Update stmts before removing stmts. * tree-ssa-propagate.c (propagate_tree_value): Remove bogus assert.
Charlie, I still feel that the var tracking pass should be able to protect itself from an infinite loop. On 8/4/2014 11:43 AM, cbaylis at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61033 > > --- Comment #6 from cbaylis at gcc dot gnu.org --- > > git bisect points to r211625 as the revision which fixes/hides this bug on > trunk. > > 2014-06-13 Richard Biener <rguenther@suse.de> > > * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): > Rewrite to propagate the VN result into all uses where > possible and to remove stmts becoming dead because of that. > (eliminate): Generalize stmt removal handling, remove in > reverse dominator order to support proper debug stmt > generation. Update stmts before removing stmts. > * tree-ssa-propagate.c (propagate_tree_value): Remove > bogus assert. >
Created attachment 33361 [details] C++ source code
(In reply to David Binderman from comment #8) > Created attachment 33361 [details] > C++ source code Please ignore this attachment. It is for a different bug.
Michael, What is the status of this bug? Thanks.
GCC 4.8.4 has been released.
GCC is looping infinitely in attempting to solve a data flow problem in vt_find_locations. My working theory is that compute_bb_dataflow is incorrectly asserting some value has changed. I have reduced my case to a candidate set of basic blocks and a (candiate) RTL location this is continually removed/added. The rtl location is: dataflow difference found: removal of: name: D#255 offset 0 (mem/f/c:SI (value/u:SI 106:3955 @0x22cb2f8/0x23424a0) [3 result.d+0 S4 A32]) I understand that the argument to 'VALUE" is a cselib_val_struct but I don't know how to map this back to a insn that is causing the problem. Any thoughts on how I might debug thus further?
The gcc-4_8-branch is being closed, re-targeting regressions to 4.9.3.
GCC 4.9.3 has been released.
Author: mkuvyrkov Date: Wed Feb 24 16:41:52 2016 New Revision: 233675 URL: https://gcc.gnu.org/viewcvs?rev=233675&root=gcc&view=rev Log: PR debug/61033 * g++.dg/pr61033.C: Add a regression testcase for PR debug/61033. Added: trunk/gcc/testsuite/g++.dg/pr61033.C Modified: trunk/gcc/testsuite/ChangeLog
Fixed in GCC 5+