shithub: scc

Download patch

ref: 52eb16bd024aab0ee1430f48f3a41c689359d8f2
parent: 3f38cfc966f9dc056be291b58d63819215e8fac2
parent: bde52bcdc34eb9fafe7336fa9a23110962a01612
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Wed May 11 08:23:32 EDT 2016

Merge remote-tracking branch 'origin/master'

--- a/cc1/code.c
+++ b/cc1/code.c
@@ -9,9 +9,7 @@
 #include "cc1.h"
 
 static void emitbin(unsigned, void *),
-            emitswitcht(unsigned, void *),
             emitcast(unsigned, void *),
-            emitswitch(unsigned, void *),
             emitsym(unsigned, void *),
             emitexp(unsigned, void *),
             emitsymid(unsigned, void *),
@@ -61,7 +59,7 @@
 	[OLABEL] = "L%d\n",
 	[ODEFAULT] = "\tf\tL%d\n",
 	[OBSWITCH] = "\ts",
-	[OESWITCH] = "\tk\n",
+	[OESWITCH] = "\tk\tL%d\n",
 	[OCASE] = "\tv\tL%d",
 	[OJUMP] = "\tj\tL%d\n",
 	[OBRANCH] = "\ty\tL%d",
@@ -129,7 +127,7 @@
 	[ORET] = emittext,
 	[ODECL] = emitdcl,
 	[OBSWITCH] = emittext,
-	[OESWITCH] = emittext,
+	[OESWITCH] = emitsymid,
 	[OPAR] = emitbin,
 	[OCALL] = emitbin,
 	[OINIT] = emitinit
@@ -188,11 +186,9 @@
 static void
 emitconst(Node *np)
 {
-	char *bp, c;
 	Symbol *sym = np->sym;
 	Type *tp = np->type;
 	TUINT u;
-	size_t n;
 
 	switch (tp->op) {
 	case PTR:
@@ -241,7 +237,6 @@
 emittype(Type *tp)
 {
 	TINT n;
-	Type **vp;
 	Symbol **sp;
 	char *tag;
 
@@ -291,7 +286,7 @@
 	char *bp, *s, *lim;
 	int n;
 
-	bp = bp = sym->u.s;
+	bp = sym->u.s;
 	lim = &sym->u.s[tp->n.elem];
 	while (bp < lim) {
 		s = bp;
--- a/cc1/decl.c
+++ b/cc1/decl.c
@@ -283,7 +283,6 @@
 	Symbol *syms[NR_FUNPARAM+1], **pars;
 	int k_r, ntypes, nsyms;
 	size_t size;
-	void (*fp)(Type **, Symbol **, int *, int *);
 
 	pushctx();
 	expect('(');
@@ -367,7 +366,7 @@
 specifier(int *sclass, int *qualifier)
 {
 	Type *tp = NULL;
-	int spec, qlf, sign, type, cls, size, mask;
+	int spec, qlf, sign, type, cls, size;
 
 	spec = qlf = sign = type = cls = size = 0;
 
--- a/cc1/expr.c
+++ b/cc1/expr.c
@@ -56,7 +56,6 @@
 {
 	Type *tp;
 	Node *new;
-	unsigned r;
 	struct limits *lim, *ilim;
 
 	tp = np->type;
@@ -85,7 +84,7 @@
 static void
 arithconv(Node **p1, Node **p2)
 {
-	int n, to = 0, s1, s2;
+	int to = 0, s1, s2;
 	unsigned r1, r2;
 	Type *tp1, *tp2;
 	Node *np1, *np2;
--- a/cc1/fold.c
+++ b/cc1/fold.c
@@ -383,7 +383,7 @@
 static Node *
 identity(int *op, Node *lp, Node *rp)
 {
-	int iszeror, isoner, istruer, val;
+	int iszeror, isoner, istruer;
 	int iszerol, isonel, istruel;
 
 	if (!rp)
--- a/cc1/init.c
+++ b/cc1/init.c
@@ -51,7 +51,6 @@
 static TINT
 fielddesig(Init *ip)
 {
-	TINT npos;
 	int ons;
 	Symbol *sym, **p;
 	Type *tp = ip->type;
@@ -79,7 +78,6 @@
 static Init *
 designation(Init *ip)
 {
-	struct designator *dp;
 	TINT (*fun)(Init *);
 
 	switch (yytoken) {
--- a/cc1/stmt.c
+++ b/cc1/stmt.c
@@ -223,7 +223,7 @@
 	emit(OBSWITCH, NULL);
 	emit(OEXPR, cond);
 	stmt(lbreak, lcont, &sw);
-	emit(OESWITCH, NULL);
+	emit(OESWITCH, lbreak);
 	emit(OLABEL, lbreak);
 }
 
--- a/cc1/symbol.c
+++ b/cc1/symbol.c
@@ -102,8 +102,6 @@
 popctx(void)
 {
 	Symbol *next, *sym;
-	char *name;
-	short f;
 
 	if (--curctx == GLOBALCTX) {
 		for (sym = labels; sym; sym = next) {
--- a/cc1/tests/test012.c
+++ b/cc1/tests/test012.c
@@ -12,7 +12,7 @@
 	s	A3
 	v	L5	#I0
 L5
-	k
+	k	L4
 L4
 	s	A3
 	v	L7	#I0
@@ -24,9 +24,9 @@
 	f	L11
 L11
 	h	#I1
-	k
+	k	L8
 L8
-	k
+	k	L6
 L6
 	h	#I2
 L10
@@ -34,7 +34,7 @@
 	v	L13	#I1
 L13
 	h	#I3
-	k
+	k	L12
 L12
 	s	A3
 	A3	#I2	:I
@@ -42,7 +42,7 @@
 	v	L16	#I1
 L16
 	h	#I4
-	k
+	k	L14
 L14
 	s	A3
 	v	L18	#I0
@@ -54,7 +54,7 @@
 	f	L20
 L20
 	h	#I1
-	k
+	k	L17
 L17
 }
 */
--- a/cc1/tests/test036.c
+++ b/cc1/tests/test036.c
@@ -43,7 +43,7 @@
 	y	L10	R7	#I1	:-I	#I0	>I
 	b
 L11
-	k
+	k	L8
 L8
 }
 */
--- a/cc2/arch/amd64-sysv/code.c
+++ b/cc2/arch/amd64-sysv/code.c
@@ -34,7 +34,6 @@
 symname(Symbol *sym)
 {
 	static char name[IDENTSIZ+1];
-	static unsigned short id;
 
 	if (sym->name) {
 		switch (sym->kind) {
--- a/cc2/arch/i386-sysv/code.c
+++ b/cc2/arch/i386-sysv/code.c
@@ -34,7 +34,6 @@
 symname(Symbol *sym)
 {
 	static char name[IDENTSIZ+1];
-	static unsigned short id;
 
 	if (sym->name) {
 		switch (sym->kind) {
--- a/cc2/arch/qbe/code.c
+++ b/cc2/arch/qbe/code.c
@@ -157,7 +157,6 @@
 static char *
 symname(Symbol *sym)
 {
-	static unsigned id;
 	char c = sigil(sym);
 
 	if (sym->name) {
--- a/cc2/arch/z80/code.c
+++ b/cc2/arch/z80/code.c
@@ -35,7 +35,6 @@
 symname(Symbol *sym)
 {
 	static char name[IDENTSIZ+1];
-	static unsigned short id;
 
 	if (sym->name) {
 		switch (sym->kind) {
--- a/cc2/node.c
+++ b/cc2/node.c
@@ -20,7 +20,6 @@
 
 static struct arena *arena;
 static Node *freep;
-static int inhome;
 
 Node *
 newnode(int op)
--- a/cc2/parser.c
+++ b/cc2/parser.c
@@ -32,8 +32,8 @@
 
 typedef void parsefun(char *, union tokenop);
 static parsefun type, symbol, getname, unary, binary, ternary, call,
-                parameter, constant, composed, binit, einit,
-                jump, oreturn, loop, assign, ocase, casetbl;
+                constant, composed, binit, einit,
+                jump, oreturn, loop, assign, casetbl;
 
 typedef void evalfun(void);
 static evalfun vardecl, beginfun, endfun, endpars, stmt,