aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2011-03-27 16:40:24 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-03-27 16:40:24 +0000
commit15ea09a082e6964a4abbc49a6834cf5ab705813a (patch)
tree03766c118bbae97b5e8fb4e1fa4138f3c7fc1a39 /gcc/go
parentfbe185d3de9e35bdb5b734da7f6bd84987b50dab (diff)
downloadgcc-15ea09a082e6964a4abbc49a6834cf5ab705813a.zip
gcc-15ea09a082e6964a4abbc49a6834cf5ab705813a.tar.gz
gcc-15ea09a082e6964a4abbc49a6834cf5ab705813a.tar.bz2
Improve error about indirecting an unsafe.Pointer type.
From-SVN: r171574
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/expressions.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index f1a2ec7..3a60051 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -3669,6 +3669,14 @@ Unary_expression::do_lower(Gogo*, Named_object*, int)
}
}
+ // Catching an invalid indirection of unsafe.Pointer here avoid
+ // having to deal with TYPE_VOID in other places.
+ if (op == OPERATOR_MULT && expr->type()->is_unsafe_pointer_type())
+ {
+ error_at(this->location(), "invalid indirect of %<unsafe.Pointer%>");
+ return Expression::make_error(this->location());
+ }
+
if (op == OPERATOR_PLUS || op == OPERATOR_MINUS
|| op == OPERATOR_NOT || op == OPERATOR_XOR)
{