ref: e2295568f7a70f6db3359ef3db8719ec26544ffb
parent: 411c5618c377b28556835dcb7ad756b6072644e4
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Fri Aug 14 10:55:38 EDT 2015
Free memory reserved for strings
--- a/cc1/cc1.h
+++ b/cc1/cc1.h
@@ -138,7 +138,8 @@
ISPRIVATE = 256,
ISLOCAL = 512,
ISEMITTED = 1024,
- ISDEFINED = 2048
+ ISDEFINED = 2048,
+ ISSTRING = 4096
};
--- a/cc1/lex.c
+++ b/cc1/lex.c
@@ -359,7 +359,7 @@
yylen = bp - yytext + 1;
yylval.sym = newsym(NS_IDEN);
- yylval.sym->flags |= ISCONSTANT;
+ yylval.sym->flags |= ISSTRING | ISCONSTANT;
yylval.sym->u.s = xstrdup(yytext+1);
yylval.sym->type = mktype(chartype, ARY, yylen - 2, NULL);
*bp++ = '"';
--- a/cc1/symbol.c
+++ b/cc1/symbol.c
@@ -130,7 +130,8 @@
warn("'%s' defined but not used", sym->name);
}
free(sym->name);
- // TODO: There is a memory leak with sym->u.s
+ if (sym->flags & ISSTRING)
+ free(sym->u.s);
free(sym);
}
head = sym;