String literals are always const

Don't make the standard mandated types of string literals
depends on warning options.  Instead make them always const,
but limit the emission of the warning by that option.
This commit is contained in:
Michael Matz 2017-07-03 18:02:57 +02:00
parent b68df809eb
commit d4fe9aba3f

View File

@ -2829,7 +2829,8 @@ static void gen_assign_cast(CType *dt)
}
}
/* check const and volatile */
if ((!(type1->t & VT_CONSTANT) && (type2->t & VT_CONSTANT)) ||
if ((!(type1->t & VT_CONSTANT) && (type2->t & VT_CONSTANT) &&
((type2->t & VT_BTYPE) != VT_BYTE || tcc_state->warn_write_strings)) ||
(!(type1->t & VT_VOLATILE) && (type2->t & VT_VOLATILE)))
tcc_warning("assignment discards qualifiers from pointer target type");
break;
@ -4381,8 +4382,7 @@ ST_FUNC void unary(void)
/* string parsing */
t = VT_BYTE;
str_init:
if (tcc_state->warn_write_strings)
t |= VT_CONSTANT;
t |= VT_CONSTANT;
type.t = t;
mk_pointer(&type);
type.t |= VT_ARRAY;