diff options
author | Mark Mitchell <mark@codesourcery.com> | 2005-09-13 14:45:13 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2005-09-13 14:45:13 +0000 |
commit | 7b09c6a4992b1b43eb00155f02b841969d48c5ae (patch) | |
tree | 72614af68e366b1988d9b8fd8b5972d5f8f82e7d /gcc | |
parent | 6493555fd370845f620a17553d2013a8acad2f93 (diff) | |
download | gcc-7b09c6a4992b1b43eb00155f02b841969d48c5ae.zip gcc-7b09c6a4992b1b43eb00155f02b841969d48c5ae.tar.gz gcc-7b09c6a4992b1b43eb00155f02b841969d48c5ae.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/register1.C | 14 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e0d24ec..d7fd5ea 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2005-09-13 Mark Mitchell <mark@codesourcery.com> + PR c++/23839 + * typeck.c (cxx_mark_addressable): Only check DECL_HARD_REGISTER + for VAR_DECLs. + +2005-09-13 Mark Mitchell <mark@codesourcery.com> + PR c++/23842 * pt.c (tsubst_default_argument): Do treat default argument expressions as occurring in the context of the function called. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index b0dfa60..76ae5104 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 5322f23..8aaa169 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2005-09-13 Mark Mitchell <mark@codesourcery.com> + PR c++/23839 + * g++.dg/parse/register1.C: New test. + +2005-09-13 Mark Mitchell <mark@codesourcery.com> + PR c++/23842 * g++.dg/template/access16.C: New test. diff --git a/gcc/testsuite/g++.dg/parse/register1.C b/gcc/testsuite/g++.dg/parse/register1.C new file mode 100644 index 0000000..3be2e65 --- /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; +} |