]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/23839 (ICE: expected var_decl, have parm_decl in cxx_mark_addressable,...
authorMark Mitchell <mark@codesourcery.com>
Tue, 13 Sep 2005 14:45:13 +0000 (14:45 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 13 Sep 2005 14:45:13 +0000 (14:45 +0000)
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

gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/register1.C [new file with mode: 0644]

index e0d24ec3e104233e2db1cda6a5c104b713c8ed95..d7fd5ea56f6c2b250eaec195087f0bfbabd259a6 100644 (file)
@@ -1,3 +1,9 @@
+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
index b0dfa604d89dcb263a701420dfd5e19e308be8c3..76ae5104b16a44c6dcdd8932e814525d6f90207c 100644 (file)
@@ -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);
index 5322f23a28d786ff4155784ff8b5e04f831937aa..8aaa16970786c5e0cc6f2d59da518514ff53055f 100644 (file)
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/g++.dg/parse/register1.C b/gcc/testsuite/g++.dg/parse/register1.C
new file mode 100644 (file)
index 0000000..3be2e65
--- /dev/null
@@ -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;
+}