shithub: scc

Download patch

ref: 3264efeca8c41b909a8fca2c57785f936fb55f80
parent: c946d13235a8460a8c7f2aa86e705202d77231a7
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Sat Jun 18 02:35:40 EDT 2022

cc1: Add debug information about decay

Applying decay can heavily modify the behaviour of some expressions.

--- a/src/cmd/cc/cc1/code.c
+++ b/src/cmd/cc/cc1/code.c
@@ -578,5 +578,6 @@
 	sym = newsym(NS_IDEN, NULL);
 	sym->type = sizettype;
 	sym->u.i = tp->size;
+	DBG("EXPR sizeof %llu", sym->u.i);
 	return constnode(sym);
 }
--- a/src/cmd/cc/cc1/expr.c
+++ b/src/cmd/cc/cc1/expr.c
@@ -194,6 +194,7 @@
 
 	switch (tp->op) {
 	case ARY:
+		DBG("EXPR decay ary");
 		tp = tp->type;
 		if (np->op == OPTR) {
 			new = np->left;
@@ -201,14 +202,18 @@
 			new->type = mktype(tp, PTR, 0, NULL);
 			return new;
 		}
+		break;
 	case FTN:
-		new = node(OADDR, mktype(tp, PTR, 0, NULL), np, NULL);
-		if (np->sym && np->sym->flags & (SGLOBAL|SLOCAL|SPRIVATE))
-			new->flags |= NCONST;
-		return new;
+		DBG("EXPR decay function");
+		break;
 	default:
 		return np;
 	}
+
+	new = node(OADDR, mktype(tp, PTR, 0, NULL), np, NULL);
+	if (np->sym && np->sym->flags & (SGLOBAL|SLOCAL|SPRIVATE))
+		new->flags |= NCONST;
+	return new;
 }
 
 static Node *