diff options
author | Luuk van Dijk <lvd@golang.org> | 2011-11-09 18:30:54 +0100 |
---|---|---|
committer | Luuk van Dijk <lvd@golang.org> | 2011-11-09 18:30:54 +0100 |
commit | ad7353bbfa12410c97b747a578d65730f404d061 (patch) | |
tree | 7ba3ea9e4d6fa095dc01eb5b3fbbee7e352e673a /src/cmd/gc/unsafe.c | |
parent | 9af0768898287b800646f6ce4cd375a9c364f459 (diff) | |
download | go-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.c | 19 |
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; +} |