diff options
author | Michael Stapelberg <stapelberg@debian.org> | 2013-05-14 18:39:35 +0200 |
---|---|---|
committer | Michael Stapelberg <michael@stapelberg.de> | 2013-05-14 18:39:35 +0200 |
commit | efcc50dfdc94c82ee0292bf71992ecb7c0123061 (patch) | |
tree | 17dca99d1dc7fc4e9fe49c2cf6a99d337d4c039f /src/cmd/cc | |
parent | 04b08da9af0c450d645ab7389d1467308cfc2db8 (diff) | |
download | golang-efcc50dfdc94c82ee0292bf71992ecb7c0123061.tar.gz |
Imported Upstream version 1.1upstream/1.1
Diffstat (limited to 'src/cmd/cc')
-rw-r--r-- | src/cmd/cc/cc.h | 1 | ||||
-rw-r--r-- | src/cmd/cc/dpchk.c | 22 | ||||
-rw-r--r-- | src/cmd/cc/funct.c | 2 | ||||
-rw-r--r-- | src/cmd/cc/lexbody | 2 |
4 files changed, 21 insertions, 6 deletions
diff --git a/src/cmd/cc/cc.h b/src/cmd/cc/cc.h index 866aeb0ab..c8de94120 100644 --- a/src/cmd/cc/cc.h +++ b/src/cmd/cc/cc.h @@ -800,6 +800,7 @@ int machcap(Node*); #pragma varargck type "Q" int32 #pragma varargck type "O" int #pragma varargck type "O" uint +#pragma varargck type "S" ushort* #pragma varargck type "T" Type* #pragma varargck type "U" char* #pragma varargck type "|" int diff --git a/src/cmd/cc/dpchk.c b/src/cmd/cc/dpchk.c index 2f038f520..34163ff92 100644 --- a/src/cmd/cc/dpchk.c +++ b/src/cmd/cc/dpchk.c @@ -692,22 +692,24 @@ pragcgo(char *verb) goto out; } - if(strcmp(verb, "cgo_export") == 0 || strcmp(verb, "dynexport") == 0) { + if(strcmp(verb, "dynexport") == 0) + verb = "cgo_export_dynamic"; + if(strcmp(verb, "cgo_export_static") == 0 || strcmp(verb, "cgo_export_dynamic") == 0) { local = getimpsym(); if(local == nil) goto err2; if(!more()) { - fmtprint(&pragcgobuf, "cgo_export %q\n", local->name); + fmtprint(&pragcgobuf, "%s %q\n", verb, local->name); goto out; } remote = getimpsym(); if(remote == nil) goto err2; - fmtprint(&pragcgobuf, "cgo_export %q %q\n", local->name, remote->name); + fmtprint(&pragcgobuf, "%s %q %q\n", verb, local->name, remote->name); goto out; err2: - yyerror("usage: #pragma cgo_export local [remote]"); + yyerror("usage: #pragma %s local [remote]", verb); goto out; } @@ -749,6 +751,18 @@ pragcgo(char *verb) goto out; } + if(strcmp(verb, "cgo_ldflag") == 0) { + p = getquoted(); + if(p == nil) + goto err5; + fmtprint(&pragcgobuf, "cgo_ldflag %q\n", p); + goto out; + + err5: + yyerror("usage: #pragma cgo_ldflag \"arg\""); + goto out; + } + out: while(getnsc() != '\n') ; diff --git a/src/cmd/cc/funct.c b/src/cmd/cc/funct.c index 057151987..7921277b4 100644 --- a/src/cmd/cc/funct.c +++ b/src/cmd/cc/funct.c @@ -269,7 +269,7 @@ dclfunct(Type *t, Sym *s) goto bad; f = alloc(sizeof(*f)); - for(o=0; o<sizeof(f->sym); o++) + for(o=0; o<nelem(f->sym); o++) f->sym[o] = S; t->funct = f; diff --git a/src/cmd/cc/lexbody b/src/cmd/cc/lexbody index 5fa980267..f4a69739c 100644 --- a/src/cmd/cc/lexbody +++ b/src/cmd/cc/lexbody @@ -263,7 +263,7 @@ lookup(void) for(s = hash[h]; s != S; s = s->link) { if(s->name[0] != c) continue; - if(memcmp(s->name, symb, l) == 0) + if(strcmp(s->name, symb) == 0) return s; } s = alloc(sizeof(*s)); |