diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e0d24ec3e10..d7fd5ea56f6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-09-13 Mark Mitchell + + PR c++/23839 + * typeck.c (cxx_mark_addressable): Only check DECL_HARD_REGISTER + for VAR_DECLs. + 2005-09-13 Mark Mitchell PR c++/23842 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index b0dfa604d89..76ae5104b16 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4340,7 +4340,7 @@ cxx_mark_addressable (tree exp) if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x) && !DECL_ARTIFICIAL (x)) { - if (DECL_HARD_REGISTER (x) != 0) + if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x)) { error ("address of explicit register variable %qD requested", x); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5322f23a28d..8aaa1697078 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-09-13 Mark Mitchell + + PR c++/23839 + * g++.dg/parse/register1.C: New test. + 2005-09-13 Mark Mitchell PR c++/23842 diff --git a/gcc/testsuite/g++.dg/parse/register1.C b/gcc/testsuite/g++.dg/parse/register1.C new file mode 100644 index 00000000000..3be2e652502 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/register1.C @@ -0,0 +1,14 @@ +// PR c++/23839 + +class C +{ + int i; +public: + C(int j) : i(j) { } + operator int() { return i; } +}; + +C f (register C x) +{ + return x + 31; +}