diff options
| author | Michael Matz <matz@suse.de> | 2017-07-04 16:37:49 +0200 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2017-07-04 16:37:49 +0200 |
| commit | 9ed8b54f6cd2ebf1d5dc678ab2296e92ad85cd3e (patch) | |
| tree | 07b490cb82da21f445ed54d45b689383aca27608 | |
| parent | 580ad5f24c9542bfaa7e24ae8a32af3e0e5a6cf9 (diff) | |
| download | tinycc-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.
| -rw-r--r-- | tccgen.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -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; |
