aboutsummaryrefslogtreecommitdiff
path: root/tccgen.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2017-07-04 16:37:49 +0200
committerMichael Matz <matz@suse.de>2017-07-04 16:37:49 +0200
commit9ed8b54f6cd2ebf1d5dc678ab2296e92ad85cd3e (patch)
tree07b490cb82da21f445ed54d45b689383aca27608 /tccgen.c
parent580ad5f24c9542bfaa7e24ae8a32af3e0e5a6cf9 (diff)
downloadtinycc-9ed8b54f6cd2ebf1d5dc678ab2296e92ad85cd3e.tar.gz
tinycc-9ed8b54f6cd2ebf1d5dc678ab2296e92ad85cd3e.tar.bz2
Revert "String literals are always const"
This reverts commit d4fe9aba3fc6f4b9cc97b100e86ffe7af5c29619. I was confused by the fact that string literals aren't writable. Nevertheless the type isn't const. As extension in GCC it's const with -Wwrite-string, which is exactly what we had before. GCC also wonders in a comment if it's really a good idea to change expression types based on warning flags (IMHO it's not), but let's be compatible. So restore the state from before.
Diffstat (limited to 'tccgen.c')
-rw-r--r--tccgen.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/tccgen.c b/tccgen.c
index 2885f3e..304225e 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -2829,8 +2829,7 @@ static void gen_assign_cast(CType *dt)
}
}
/* check const and volatile */
- if ((!(type1->t & VT_CONSTANT) && (type2->t & VT_CONSTANT) &&
- ((type2->t & VT_BTYPE) != VT_BYTE || tcc_state->warn_write_strings)) ||
+ if ((!(type1->t & VT_CONSTANT) && (type2->t & VT_CONSTANT)) ||
(!(type1->t & VT_VOLATILE) && (type2->t & VT_VOLATILE)))
tcc_warning("assignment discards qualifiers from pointer target type");
break;
@@ -4382,7 +4381,8 @@ ST_FUNC void unary(void)
/* string parsing */
t = VT_BYTE;
str_init:
- t |= VT_CONSTANT;
+ if (tcc_state->warn_write_strings)
+ t |= VT_CONSTANT;
type.t = t;
mk_pointer(&type);
type.t |= VT_ARRAY;