summaryrefslogtreecommitdiff
path: root/src/cmd/gc/unsafe.c
diff options
context:
space:
mode:
authorLuuk van Dijk <lvd@golang.org>2011-11-09 18:30:54 +0100
committerLuuk van Dijk <lvd@golang.org>2011-11-09 18:30:54 +0100
commitad7353bbfa12410c97b747a578d65730f404d061 (patch)
tree7ba3ea9e4d6fa095dc01eb5b3fbbee7e352e673a /src/cmd/gc/unsafe.c
parent9af0768898287b800646f6ce4cd375a9c364f459 (diff)
downloadgo-ad7353bbfa12410c97b747a578d65730f404d061.tar.gz
gc: better error for non-calling use of unsafe builtins.
Fixes issue 1951 R=rsc CC=golang-dev http://codereview.appspot.com/5372041
Diffstat (limited to 'src/cmd/gc/unsafe.c')
-rw-r--r--src/cmd/gc/unsafe.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/cmd/gc/unsafe.c b/src/cmd/gc/unsafe.c
index 7504b51c9..21496b08c 100644
--- a/src/cmd/gc/unsafe.c
+++ b/src/cmd/gc/unsafe.c
@@ -10,6 +10,7 @@
* look for
* unsafe.Sizeof
* unsafe.Offsetof
+ * unsafe.Alignof
* rewrite with a constant
*/
Node*
@@ -22,7 +23,7 @@ unsafenmagic(Node *nn)
Val val;
Node *fn;
NodeList *args;
-
+
fn = nn->left;
args = nn->list;
@@ -83,7 +84,7 @@ bad:
yyerror("invalid expression %N", nn);
v = 0;
goto ret;
-
+
yes:
if(args->next != nil)
yyerror("extra arguments for %S", s);
@@ -97,3 +98,17 @@ ret:
n->type = types[TUINTPTR];
return n;
}
+
+int
+isunsafebuiltin(Node *n)
+{
+ if(n == N || n->op != ONAME || n->sym == S || n->sym->pkg != unsafepkg)
+ return 0;
+ if(strcmp(n->sym->name, "Sizeof") == 0)
+ return 1;
+ if(strcmp(n->sym->name, "Offsetof") == 0)
+ return 1;
+ if(strcmp(n->sym->name, "Alignof") == 0)
+ return 1;
+ return 0;
+}