[Bug preprocessor/82939] genmatch fills up terminal with endless printing of periods
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Feb 15 10:26:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82939
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |msebor at gcc dot gnu.org
--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
Note the function shouldn't ever be called since the call is guarded by:
if (set->trace_includes)
trace_include (set, map);
and the linemap should have set->trace_includes set to false. So
it would be interesting to look at (in the failing case) the assembly
of line-map.o:linemap_init which does
void
linemap_init (struct line_maps *set,
source_location builtin_location)
{
*set = line_maps ();
thus default-constructs line_maps and does an aggregate assignment.
Maybe sth goes wrong here and we can work around the bug by providing
a constructor initializing all members instead of relying on value-init.
Just in case you want to investigate some more ;)
Note that on the GCC 7 branch we instead do
linemap_init (struct line_maps *set,
source_location builtin_location)
{
memset (set, 0, sizeof (struct line_maps));
Martin - you changed this to assignment from default-construction. Was there
any good reason to do so?
Quickly checking compilers with the followign testcase shows
struct line_maps {
~line_maps ();
bool trace_includes;
};
void foo (line_maps *m)
{
*m = line_maps ();
}
GCC 4.2.4:
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (*NON_LVALUE_EXPR <m> = *(struct line_maps &) (struct line_maps *)
&TARGET_EXPR <D.2350, {.trace_includes=0}>) >>>
GCC 4.2.3:
;; Function line_maps::line_maps() (_ZN9line_mapsC1Ev *INTERNAL* )
;; enabled by -tree-original
{
}
;; Function void foo(line_maps*) (_Z3fooP9line_maps)
;; enabled by -tree-original
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (*NON_LVALUE_EXPR <m> = *(struct line_maps &) (struct line_maps *)
&TARGET_EXPR <D.2368, <<< Unknown tree: aggr_init_expr
__comp_ctor
0B
D.2368 >>>
>) >>>
>>;
so GCC 4.2.3 doesn't properly value-initialize for this expression (but 4.2.4
does). GCC 4.3.0 looks fine as well, so does 4.1.2 and 4.1.0 but not
4.2.{0,1,2} either.
Not sure what to suggest here but _not_ use unfixed 4.2.{0,1,2,3} as
host-compiler...
I suppose Apple isn't going to fix their GCC 4.2.x based compiler (IIRC
that's even gone for newer OS-X / XCode).
Eric - can you check Apple G++ on the above small testcase?
More information about the Gcc-bugs
mailing list