class.c (layout_class_type): Make DECL_MODE match TYPE_MODE for an bit-field whose width exceeds that of its...
* class.c (layout_class_type): Make DECL_MODE match TYPE_MODE for an bit-field whose width exceeds that of its type. * g++.dg/abi/bitfield11.C: New test. * g++.dg/abi/bitfield12.C: Likewise. From-SVN: r71392
This commit is contained in:
parent
bd12da498d
commit
29edb15c56
@ -4759,7 +4759,15 @@ layout_class_type (tree t, tree *virtuals_p)
|
||||
field to the size of its declared type; the rest of the
|
||||
field is effectively invisible. */
|
||||
DECL_SIZE (field) = TYPE_SIZE (type);
|
||||
DECL_MODE (field) = TYPE_MODE (type);
|
||||
/* We must also reset the DECL_MODE of the field. */
|
||||
if (abi_version_at_least (2))
|
||||
DECL_MODE (field) = TYPE_MODE (type);
|
||||
else if (warn_abi
|
||||
&& DECL_MODE (field) != TYPE_MODE (type))
|
||||
/* Versions of G++ before G++ 3.4 did not reset the
|
||||
DECL_MODE. */
|
||||
warning ("the offset of `%D' may not be ABI-compliant and may "
|
||||
"change in a future version of GCC", field);
|
||||
}
|
||||
else
|
||||
layout_nonempty_base_or_field (rli, field, NULL_TREE,
|
||||
|
@ -1,3 +1,8 @@
|
||||
2003-09-14 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* g++.dg/abi/bitfield11.C: New test.
|
||||
* g++.dg/abi/bitfield12.C: Likewise.
|
||||
|
||||
2003-09-14 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* gcc.dg/cpp/separate-1.c: Adjust line of error. Test for correct
|
||||
|
14
gcc/testsuite/g++.dg/abi/bitfield11.C
Normal file
14
gcc/testsuite/g++.dg/abi/bitfield11.C
Normal file
@ -0,0 +1,14 @@
|
||||
// { dg-do run }
|
||||
// { dg-options "-w -fabi-version=0" }
|
||||
|
||||
struct S {
|
||||
char c : 1024;
|
||||
};
|
||||
|
||||
S s;
|
||||
|
||||
int main () {
|
||||
s.c = 1;
|
||||
if (*(char *)&s != 1)
|
||||
return 1;
|
||||
}
|
5
gcc/testsuite/g++.dg/abi/bitfield12.C
Normal file
5
gcc/testsuite/g++.dg/abi/bitfield12.C
Normal file
@ -0,0 +1,5 @@
|
||||
// { dg-options "-Wabi -fabi-version=1" }
|
||||
|
||||
struct S { // { dg-warning "ABI" }
|
||||
char c : 1024; // { dg-warning "width" }
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user