Hi. This patch fixes what I screwed in r256989, where I wrongly replaced TREE_CODE (TREE_TYPE (decl)) with TYPE_SIZE (decl), which is wrong.
Patch survives testing on x86_64-linux-gnu. Ready for trunk? Thanks, Martin gcc/lto/ChangeLog: 2018-11-19 Martin Liska <mli...@suse.cz> PR lto/88077 * lto-symtab.c (lto_symtab_merge): Transform the condition before r256989. gcc/testsuite/ChangeLog: 2018-11-19 Martin Liska <mli...@suse.cz> PR lto/88077 * gcc.dg/lto/pr88077_0.c: New test. * gcc.dg/lto/pr88077_1.c: New test. --- gcc/lto/lto-symtab.c | 5 +++-- gcc/testsuite/gcc.dg/lto/pr88077_0.c | 3 +++ gcc/testsuite/gcc.dg/lto/pr88077_1.c | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/lto/pr88077_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr88077_1.c
diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c index 18437eb2841..d018a16bd42 100644 --- a/gcc/lto/lto-symtab.c +++ b/gcc/lto/lto-symtab.c @@ -374,8 +374,9 @@ lto_symtab_merge (symtab_node *prevailing, symtab_node *entry) int a[]={1,2,3}; here the first declaration is COMMON and sizeof(a) == sizeof (int). */ - else if (TREE_CODE (type) == ARRAY_TYPE) - return (TYPE_SIZE (decl) == TYPE_SIZE (TREE_TYPE (type))); + else if (TREE_CODE (type) != ARRAY_TYPE + || (TYPE_SIZE (type) != TYPE_SIZE (TREE_TYPE (type)))) + return false; } return true; diff --git a/gcc/testsuite/gcc.dg/lto/pr88077_0.c b/gcc/testsuite/gcc.dg/lto/pr88077_0.c new file mode 100644 index 00000000000..9e464b6ad4a --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr88077_0.c @@ -0,0 +1,3 @@ +/* { dg-lto-do link } */ + +int HeaderStr; diff --git a/gcc/testsuite/gcc.dg/lto/pr88077_1.c b/gcc/testsuite/gcc.dg/lto/pr88077_1.c new file mode 100644 index 00000000000..fd3de3e77a6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr88077_1.c @@ -0,0 +1,6 @@ +char HeaderStr[1]; + +int main() +{ + return 0; +}