[Bug debug/86549] New: [8/9 Regression] -flto -g0 vs. -g issues
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 17 12:57:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86549
Bug ID: 86549
Summary: [8/9 Regression] -flto -g0 vs. -g issues
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code, lto
Severity: normal
Priority: P3
Component: debug
Assignee: unassigned at gcc dot gnu.org
Reporter: rguenth at gcc dot gnu.org
Target Milestone: ---
We do have some issues when compiling with LTO and -g0 but link with -g because
of the fact that the debug machinery doesn't consistently avoid creating types
late and with free-lang-data scrapping useful info dwarf2out gets confused.
Example from PR86523:
class a {
int b;
};
int const c = 0, d = 1, f = 2, g = 3;
struct B {
typedef a h;
h i;
};
template <class> B j();
template <class> struct k { static B const e; };
template <class l> B const k<l>::e = j<l>();
inline B m() {
switch (0) {
case c:
case d:
return k<int>::e;
case f:
case g:;
}
}
And that PRs comment#8 says
That would be fixed by sth like the following but that then hides
issues with consistent -g as we ran into. It might be instead interesting
to make it more consistently fail by asserting early_dwarf here ...
(but I expect that to blow up in our face)
So I'm not going to fix this right now but will open a new bug for it.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index bd45e0b0685..3eaa032bb95 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -23732,12 +23732,13 @@ gen_variable_die (tree decl, tree origin, dw_die_ref
context_die)
else
add_name_and_src_coords_attributes (var_die, decl, no_linkage_name);
- if ((origin == NULL && !specialization_p)
- || (origin != NULL
- && !DECL_ABSTRACT_P (decl_or_origin)
- && variably_modified_type_p (TREE_TYPE (decl_or_origin),
- decl_function_context
- (decl_or_origin))))
+ if (early_dwarf
+ && ((origin == NULL && !specialization_p)
+ || (origin != NULL
+ && !DECL_ABSTRACT_P (decl_or_origin)
+ && variably_modified_type_p (TREE_TYPE (decl_or_origin),
+ decl_function_context
+ (decl_or_origin)))))
{
tree type = TREE_TYPE (decl_or_origin);
More information about the Gcc-bugs
mailing list