This is a multiple initialization problem. Here is an example code: #include #include int num = 20; int num = 30; void main(void) { print("%d\n", num); exits(nil); } relevant parts: /sys/src/cmd/8l/asm.c:424: /sys/src/cmd/8l/pass.c:16: 2012/11/28 keystroke > Thank you for your reply, erik. > > But I don't quite follow you. Are you suggesting that the error has > nothing to do with "opnames" and "etnames", but is about the following word > "memccpy"? > > I had grep opnames and etnames before, and finds only one initial place. > And I grep memccpy, no result was found. > There is a strange situation, when I "8l subr.c" then it's "memccpy", when > I > "8l *.8", it shows "create": > > (2050) DATA ...(same as before) > create: multiple initialization. > ...(same as before) > create: multiple initialization. > > I suspect it is opnames and etnames that cause the problem, and I find > something > strange in the subr.c and it's included file go.h, is it relevant? > > ============================================================= > > subr.c > ============================================================= > static char* > opnames[] = > { > [OADDR] = "ADDR", > [OADD] = "ADD", > [OANDAND] = "ANDAND", > [OAND] = "AND", > [OARRAY] = "ARRAY", > [OASOP] = "ASOP", > [OAS] = "AS", > [OBAD] = "BAD", > [OBREAK] = "BREAK", > [OCALL] = "CALL", > [OCALLPTR] = "CALLPTR", > [OCALLMETH] = "CALLMETH", > [OCALLINTER] = "CALLINTER", > [OCAT] = "CAT", > [OCASE] = "CASE", > [OXCASE] = "XCASE", > [OFALL] = "FALL", > [OCONV] = "CONV", > [OCOLAS] = "COLAS", > [OCOM] = "COM", > [OCONST] = "CONST", > [OCONTINUE] = "CONTINUE", > [ODCLARG] = "DCLARG", > [ODCLCONST] = "DCLCONST", > [ODCLFIELD] = "DCLFIELD", > [ODCLFUNC] = "DCLFUNC", > [ODCLTYPE] = "DCLTYPE", > [ODCLVAR] = "DCLVAR", > [ODIV] = "DIV", > [ODOT] = "DOT", > [ODOTPTR] = "DOTPTR", > [ODOTMETH] = "DOTMETH", > [ODOTINTER] = "DOTINTER", > [OEMPTY] = "EMPTY", > [OEND] = "END", > [OEQ] = "EQ", > [OFOR] = "FOR", > [OFUNC] = "FUNC", > [OGE] = "GE", > [OPROC] = "PROC", > [OGOTO] = "GOTO", > [OGT] = "GT", > [OIF] = "IF", > [OINDEX] = "INDEX", > [OINDEXPTR] = "INDEXPTR", > [OINDEXSTR] = "INDEXSTR", > [OINDEXMAP] = "INDEXMAP", > [OINDEXPTRMAP] = "INDEXPTRMAP", > [OIND] = "IND", > [OLABEL] = "LABEL", > [OLE] = "LE", > [OLEN] = "LEN", > [OLIST] = "LIST", > [OLITERAL] = "LITERAL", > [OLSH] = "LSH", > [OLT] = "LT", > [OMINUS] = "MINUS", > [OMOD] = "MOD", > [OMUL] = "MUL", > [ONAME] = "NAME", > [ONE] = "NE", > [ONOT] = "NOT", > [OOROR] = "OROR", > [OOR] = "OR", > [OPLUS] = "PLUS", > [ODEC] = "DEC", > [OINC] = "INC", > [OSEND] = "SEND", > [ORECV] = "RECV", > [OPTR] = "PTR", > [ORETURN] = "RETURN", > [ORSH] = "RSH", > [OSLICE] = "SLICE", > [OSUB] = "SUB", > [OSWITCH] = "SWITCH", > [OTYPE] = "TYPE", > [OVAR] = "VAR", > [OEXPORT] = "EXPORT", > [OIMPORT] = "IMPORT", > [OXOR] = "XOR", > [ONEW] = "NEW", > [OFALL] = "FALL", > [OXFALL] = "XFALL", > [OPANIC] = "PANIC", > [OPRINT] = "PRINT", > [OXXX] = "XXX", > }; > > ============================================================= > > go.h > ============================================================= > enum > { > OXXX, > > OTYPE, OCONST, OVAR, OEXPORT, OIMPORT, > > ONAME, > ODOT, ODOTPTR, ODOTMETH, ODOTINTER, > ODCLFUNC, ODCLCONST, ODCLVAR, > ODCLTYPE, ODCLFIELD, ODCLARG, > OLIST, > OPTR, OARRAY, > ORETURN, OFOR, OIF, OSWITCH, > OAS, OASOP, OCOLAS, OCASE, OXCASE, OFALL, OXFALL, > OGOTO, OPROC, ONEW, OPANIC, OPRINT, OEMPTY, > > OOROR, > OANDAND, > OEQ, ONE, OLT, OLE, OGE, OGT, > OADD, OSUB, OOR, OXOR, OCAT, > OMUL, ODIV, OMOD, OLSH, ORSH, OAND, > ODEC, OINC, > OLEN, > OFUNC, > OLABEL, > OBREAK, > OCONTINUE, > OADDR, > OIND, > OCALL, OCALLPTR, OCALLMETH, OCALLINTER, > OINDEX, OINDEXPTR, OINDEXSTR, OINDEXMAP, OINDEXPTRMAP, > OSLICE, > ONOT, OCOM, OPLUS, OMINUS, OSEND, ORECV, > OLITERAL, > OCONV, > OBAD, > > OEND, > }; > >