diff options
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/expr/bitfield8.C | 24 |
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1b7172f..8aad37a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-04-17 Mark Mitchell <mark@codesourcery.com> + + PR c++/31513 + * call.c (convert_for_arg_passing): Convert bitfields to their + declared types. + 2007-04-17 Simon Martin <simartin@users.sourceforge.net> PR c++/31517 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 0b0bb64..abccb4e 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4713,6 +4713,7 @@ type_passed_as (tree type) tree convert_for_arg_passing (tree type, tree val) { + val = convert_bitfield_to_declared_type (val); if (val == error_mark_node) ; /* Pass classes with copy ctors by invisible reference. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a1625ef..fe20b61 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-04-17 Mark Mitchell <mark@codesourcery.com> + + PR c++/31513 + * g++.dg/expr/bitfield8.C: New test. + 2007-04-17 Joseph Myers <joseph@codesourcery.com> Richard Sandiford <richard@codesourcery.com> diff --git a/gcc/testsuite/g++.dg/expr/bitfield8.C b/gcc/testsuite/g++.dg/expr/bitfield8.C new file mode 100644 index 0000000..566109c --- /dev/null +++ b/gcc/testsuite/g++.dg/expr/bitfield8.C @@ -0,0 +1,24 @@ +// PR c++/31513 +// { dg-do run } + +extern "C" void abort(); + +struct tree_type { + unsigned int precision : 9; +}; + +void bork(unsigned int i) { + if (i != 7) + abort(); +} + +void foo(struct tree_type *t) +{ + bork(t->precision); +} + +int main() { + tree_type t; + t.precision = 7; + foo(&t); +} |