From: Mark Mitchell Date: Tue, 13 Sep 2005 14:45:13 +0000 (+0000) Subject: re PR c++/23839 (ICE: expected var_decl, have parm_decl in cxx_mark_addressable,... X-Git-Tag: misc/cutover-cvs2svn~646 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7b09c6a4992b1b43eb00155f02b841969d48c5ae;p=thirdparty%2Fgcc.git re PR c++/23839 (ICE: expected var_decl, have parm_decl in cxx_mark_addressable, at cp/typeck.c:4343) PR c++/23839 * typeck.c (cxx_mark_addressable): Only check DECL_HARD_REGISTER for VAR_DECLs. PR c++/23839 * g++.dg/parse/register1.C: New test. From-SVN: r104225 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e0d24ec3e104..d7fd5ea56f6c 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 b0dfa604d89d..76ae5104b16a 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 5322f23a28d7..8aaa16970786 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 000000000000..3be2e652502f --- /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; +}