re PR lto/78472 (warning: type of 's' does not match original declaration from zero length bitfield in C vs C++)
2016-11-23 Richard Biener <rguenther@suse.de> PR lto/78472 * tree.c (gimple_canonical_types_compatible_p): Ignore zero-sized fields. lto/ * lto.c (hash_canonical_type): Ignore zero-sized fields. * g++.dg/lto/pr78472_0.c: New testcase. * g++.dg/lto/pr78472_1.C: Likewise. From-SVN: r242746
This commit is contained in:
parent
a5bb8a5cea
commit
efb7123241
@ -1,3 +1,9 @@
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR lto/78472
|
||||
* tree.c (gimple_canonical_types_compatible_p): Ignore zero-sized
|
||||
fields.
|
||||
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
Prathamesh Kulkarni <prathamesh.kulkarni@linaro.rog>
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR lto/78472
|
||||
* lto.c (hash_canonical_type): Ignore zero-sized fields.
|
||||
|
||||
2016-11-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
PR c++/71973
|
||||
|
@ -373,7 +373,9 @@ hash_canonical_type (tree type)
|
||||
tree f;
|
||||
|
||||
for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f))
|
||||
if (TREE_CODE (f) == FIELD_DECL)
|
||||
if (TREE_CODE (f) == FIELD_DECL
|
||||
&& (! DECL_SIZE (f)
|
||||
|| ! integer_zerop (DECL_SIZE (f))))
|
||||
{
|
||||
iterative_hash_canonical_type (TREE_TYPE (f), hstate);
|
||||
nf++;
|
||||
|
@ -1,3 +1,9 @@
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR lto/78472
|
||||
* g++.dg/lto/pr78472_0.c: New testcase.
|
||||
* g++.dg/lto/pr78472_1.C: Likewise.
|
||||
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
Prathamesh Kulkarni <prathamesh.kulkarni@linaro.rog>
|
||||
|
||||
|
12
gcc/testsuite/g++.dg/lto/pr78472_0.c
Normal file
12
gcc/testsuite/g++.dg/lto/pr78472_0.c
Normal file
@ -0,0 +1,12 @@
|
||||
// { dg-lto-do link }
|
||||
|
||||
extern struct S
|
||||
{
|
||||
unsigned i:4;
|
||||
unsigned :0;
|
||||
} s;
|
||||
static void *f(void)
|
||||
{
|
||||
return &s;
|
||||
}
|
||||
int main() {}
|
9
gcc/testsuite/g++.dg/lto/pr78472_1.C
Normal file
9
gcc/testsuite/g++.dg/lto/pr78472_1.C
Normal file
@ -0,0 +1,9 @@
|
||||
struct S
|
||||
{
|
||||
unsigned i:4;
|
||||
unsigned :0;
|
||||
} s;
|
||||
static void *f(void)
|
||||
{
|
||||
return &s;
|
||||
}
|
10
gcc/tree.c
10
gcc/tree.c
@ -13708,10 +13708,14 @@ gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
|
||||
f1 || f2;
|
||||
f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
|
||||
{
|
||||
/* Skip non-fields. */
|
||||
while (f1 && TREE_CODE (f1) != FIELD_DECL)
|
||||
/* Skip non-fields and zero-sized fields. */
|
||||
while (f1 && (TREE_CODE (f1) != FIELD_DECL
|
||||
|| (DECL_SIZE (f1)
|
||||
&& integer_zerop (DECL_SIZE (f1)))))
|
||||
f1 = TREE_CHAIN (f1);
|
||||
while (f2 && TREE_CODE (f2) != FIELD_DECL)
|
||||
while (f2 && (TREE_CODE (f2) != FIELD_DECL
|
||||
|| (DECL_SIZE (f2)
|
||||
&& integer_zerop (DECL_SIZE (f2)))))
|
||||
f2 = TREE_CHAIN (f2);
|
||||
if (!f1 || !f2)
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user