From d44d8cdf60959a01a28280b07dbfde37b1f13745 Mon Sep 17 00:00:00 2001 From: Christian Jullien Date: Sat, 12 Jan 2019 10:41:56 +0100 Subject: [PATCH] Add more STDC_ C11 compatible constants --- libtcc.c | 85 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/libtcc.c b/libtcc.c index 543b3958..bcccbd53 100644 --- a/libtcc.c +++ b/libtcc.c @@ -1793,35 +1793,62 @@ reparse: case TCC_OPTION_std: if (*optarg == '=') { if (strcmp(optarg, "=c11") == 0) { - tcc_undefine_symbol(s, "__STDC_VERSION__"); - tcc_define_symbol(s, "__STDC_VERSION__", "201112L"); - /* - * The integer constant 1, intended to indicate - * that the implementation does not support atomic - * types (including the _Atomic type qualifier) and - * the header. - */ - tcc_define_symbol(s, "__STDC_NO_ATOMICS__", "1"); - /* - * The integer constant 1, intended to indicate - * that the implementation does not support complex - * types or the header. - */ - tcc_define_symbol(s, "__STDC_NO_COMPLEX__", "1"); - /* - * The integer constant 1, intended to indicate - * that the implementation does not support the - * header. - */ - tcc_define_symbol(s, "__STDC_NO_THREADS__", "1"); - /* - * __STDC_NO_VLA__, tcc supports VLA. - * The integer constant 1, intended to indicate - * that the implementation does not support - * variable length arrays or variably modified - * types. - */ - s->cversion = 201112; + tcc_undefine_symbol(s, "__STDC_VERSION__"); + tcc_define_symbol(s, "__STDC_VERSION__", "201112L"); + /* + * The integer constant 1, intended to indicate + * that the implementation does not support atomic + * types (including the _Atomic type qualifier) and + * the header. + */ + tcc_define_symbol(s, "__STDC_NO_ATOMICS__", "1"); + /* + * The integer constant 1, intended to indicate + * that the implementation does not support complex + * types or the header. + */ + tcc_define_symbol(s, "__STDC_NO_COMPLEX__", "1"); + /* + * The integer constant 1, intended to indicate + * that the implementation does not support the + * header. + */ + tcc_define_symbol(s, "__STDC_NO_THREADS__", "1"); + /* + * __STDC_NO_VLA__, tcc supports VLA. + * The integer constant 1, intended to indicate + * that the implementation does not support + * variable length arrays or variably modified + * types. + */ +#if !defined(TCC_TARGET_PE) + /* + * An integer constant of the form yyyymmL (for + * example, 199712L). If this symbol is defined, + * then every character in the Unicode required + * set, when stored in an object of type + * wchar_t, has the same value as the short + * identifier of that character. + */ + tcc_define_symbol(s, "__STDC_ISO_10646__", "201605L"); + /* + * The integer constant 1, intended to indicate + * that values of type char16_t are UTF−16 + * encoded. If some other encoding is used, the + * macro shall not be defined and the actual + * encoding used is implementation defined. + */ + tcc_define_symbol(s, "__STDC_UTF_16__", "1"); + /* + * The integer constant 1, intended to indicate + * that values of type char32_t are UTF−32 + * encoded. If some other encoding is used, the + * macro shall not be defined and the actual + * encoding used is implementationdefined. + */ + tcc_define_symbol(s, "__STDC_UTF_32__", "1"); +#endif /* !TCC_TARGET_PE */ + s->cversion = 201112; } } /*