aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/typeck.c13
2 files changed, 16 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 080e246..d6a7eeb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-11-10 Adam Nemet <anemet@lnxw.com>
+
+ PR middle-end/18160
+ * typeck.c (cxx_mark_addressable): Issue an error if address of an
+ explicit register variable is requested.
+
2004-11-10 Nathan Sidwell <nathan@codesourcery.com>
PR c++/18143
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index c83d33a..ce3f2f7 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -4343,9 +4343,16 @@ cxx_mark_addressable (tree exp)
case CONST_DECL:
case RESULT_DECL:
if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
- && !DECL_ARTIFICIAL (x) && extra_warnings)
- warning ("address requested for %qD, which is declared %<register%>",
- x);
+ && !DECL_ARTIFICIAL (x))
+ if (DECL_HARD_REGISTER (x) != 0)
+ {
+ error
+ ("address of explicit register variable %qD requested", x);
+ return false;
+ }
+ else if (extra_warnings)
+ warning
+ ("address requested for %qD, which is declared %<register%>", x);
TREE_ADDRESSABLE (x) = 1;
return true;