From 9ed8b54f6cd2ebf1d5dc678ab2296e92ad85cd3e Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Tue, 4 Jul 2017 16:37:49 +0200 Subject: [PATCH] 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. --- tccgen.c | 6 +++--- 1 file 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;