[Bug debug/68860] [6 regression] FAIL: gcc.dg/guality/pr36728-1.c -O3 -g line 16 arg1 == 1
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Dec 22 09:05:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68860
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #4)
> Created attachment 37097 [details]
> gcc6-pr68860-lto.patch
>
> I've noticed that the new tests still fail with LTO.
> It seems the reason is that LTO ignores DECL_HAS_DEBUG_ARGS_P etc., so this
> stuff is just lost.
> I've added some changes so that this is streamed, but it seems that is not
> enough, DECL_ORIGIN of the decls is wrong, so it isn't used anyway.
> BTW, Honza, why is:
> if (code == VAR_DECL
> && DECL_HAS_DEBUG_EXPR_P (t))
> visit (DECL_DEBUG_EXPR (t));
> used in hash_tree? Depends on what the function is used for, if it is for
> code generation or something like that, better it should not depend on the
> debug info stuff...
So, the reason why nothing is emitted on the callee side with this patch is
that LTO does never stream DECL_ABSTRACT_ORIGIN, and this is used to double
check the data before actually trying to emit anything. Perhaps this could be
bypassed by some lto condition, but in any case we'd need a way how to find out
the correspondence between those decl_debug_args decls and the original
arguments that were optimized away.
The reason why nothing is emitted on the caller sides is that for some reason
when streaming in the decl_debug_args, all the DEBUG_EXPR_DECLs turn out to be
D#1, while they really should be D#1, D#2 etc. and the DEBUG_EXPR_DECLs emitted
in the callers before those calls should match them, while they are assigned
independently.
More information about the Gcc-bugs
mailing list