From: Bruno Haible Date: Thu, 19 Jun 2025 11:35:46 +0000 (+0200) Subject: Update gcc-internal-format for GCC 15. X-Git-Tag: v0.26~104 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=82ddb5145579b9b4e834887139f439afadf7e47d;p=thirdparty%2Fgettext.git Update gcc-internal-format for GCC 15. Reported by Roland Illig, Andrew Pinski, Jakub Jelinek in . Also reported by Roland Illig in , . * gettext-tools/src/format-gcc-internal.c: Update for GCC 15. * gettext-tools/tests/format-gcc-internal-1: Likewise. * gettext-tools/tests/format-gcc-internal-2: Likewise. * gettext-tools/doc/gettext.texi (gcc-internal-format): Likewise. --- diff --git a/gettext-tools/doc/gettext.texi b/gettext-tools/doc/gettext.texi index b53440fd8..ec09e5ef3 100644 --- a/gettext-tools/doc/gettext.texi +++ b/gettext-tools/doc/gettext.texi @@ -10389,20 +10389,78 @@ PHP format strings are described in the documentation of the PHP function @node gcc-internal-format @subsection GCC internal Format Strings -These format strings are used inside the GCC sources. In such a format -string, a directive starts with @samp{%}, is optionally followed by a -size specifier @samp{l}, an optional flag @samp{+}, another optional flag -@samp{#}, and is finished by a specifier: @samp{%} denotes a literal -percent sign, @samp{c} denotes a character, @samp{s} denotes a string, -@samp{i} and @samp{d} denote an integer, @samp{o}, @samp{u}, @samp{x} -denote an unsigned integer, @samp{.*s} denotes a string preceded by a -width specification, @samp{H} denotes a @samp{location_t *} pointer, -@samp{D} denotes a general declaration, @samp{F} denotes a function -declaration, @samp{T} denotes a type, @samp{A} denotes a function argument, -@samp{C} denotes a tree code, @samp{E} denotes an expression, @samp{L} -denotes a programming language, @samp{O} denotes a binary operator, -@samp{P} denotes a function parameter, @samp{Q} denotes an assignment -operator, @samp{V} denotes a const/volatile qualifier. +These format strings are used inside the GCC sources. +In such a format string, +a directive starts with @samp{%}, +is optionally followed by a size specifier @samp{l} or @samp{ll} +or @samp{w} or @samp{z} or @samp{t}, +an optional flag @samp{q} (indicates quotes), +another optional flag @samp{+}, +another optional flag @samp{#}, +and is finished by a specifier: +@itemize @bullet +@item +@samp{%} denotes a literal percent sign, +@item +@samp{<} denotes an opening quote, +@item +@samp{>} or @samp{'} denotes a closing quote, +@item +@samp{r} denotes the beginning of a colored text segment, +@item +@samp{R} denotes the end of a colored text segment, +@item +@samp{@{} denotes the beginning of a clickable text segment, +@item +@samp{@}} denotes the end of a clickable text segment, +@item +@samp{c} denotes a character, +@item +@samp{s} denotes a string, +@item +@samp{i} and @samp{d} denote an integer, +@item +@samp{o}, @samp{u}, @samp{x} denote an unsigned integer, +@item +@samp{f} denotes a floating-point number, +@item +@samp{.*s} denotes a string preceded by a width specification, +@item +@samp{D} denotes a general declaration, +@item +@samp{E} denotes an expression, +@item +@samp{F} denotes a function declaration, +@item +@samp{T} denotes a type, +@item +@samp{A} denotes a function argument, +@item +@samp{H} denotes the first type in a type difference, +@item +@samp{I} denotes the second type in a type difference, +@item +@samp{O} denotes a binary operator, +@item +@samp{P} denotes a function parameter index, +@item +@samp{Q} denotes an assignment operator, +@item +@samp{S} denotes a substitution, +@item +@samp{X} denotes an exception, +@item +@samp{V} or @samp{v} denotes a list of const/volatile qualifiers, +@item +@samp{C} denotes a tree code or the current locus, +@item +@samp{L} denotes a programming language or a locus, +@item +@samp{p}, @samp{@@}, @samp{e} denote +various other types of compiler-internal objects, +@item +@samp{Z} denotes an array of integers. +@end itemize @node gfc-internal-format @subsection GFC internal Format Strings diff --git a/gettext-tools/src/format-gcc-internal.c b/gettext-tools/src/format-gcc-internal.c index 4e7335b1e..535a0005c 100644 --- a/gettext-tools/src/format-gcc-internal.c +++ b/gettext-tools/src/format-gcc-internal.c @@ -32,28 +32,36 @@ #define _(str) gettext (str) /* GCC internal format strings consist of language frontend independent - format directives, implemented in gcc-4.3.0/gcc/pretty-print.c (function - pp_base_format), plus some frontend dependent extensions: + format directives, implemented in gcc-15.1.0/gcc/pretty-print.cc (method + pretty_printer::format), plus some frontend dependent extensions, activated + through set_format_decoder invocations: + - for frontend independent diagnostics + in gcc-15.1.0/gcc/tree-diagnostic.cc (function default_tree_printer) - for the C/ObjC frontend - in gcc-4.3.0/gcc/c-objc-common.c (function c_tree_printer) + in gcc-15.1.0/gcc/c/c-objc-common.cc (function c_tree_printer) - for the C++ frontend - in gcc-4.3.0/gcc/cp/error.c (function cp_printer) + in gcc-15.1.0/gcc/cp/error.cc (function cp_printer) + - for the Fortran frontend + in gcc-15.1.0/gcc/fortran/error.cc (function gfc_format_decoder) Taking these together, GCC internal format strings are specified as follows. A directive - starts with '%', - either is finished by one of these: - - '%', '<', '>', "'", that need no argument, + - '%', '<', '>', '}', "'", 'R', that need no argument, - 'm', that needs no argument but looks at an err_no variable, - or is continued like this: - optionally 'm$' where m is a positive integer, - optionally any number of flags: 'q' (once only), - 'l' (up to twice) or 'w' (once only) (exclusive), + 'l' (up to twice) or 'w' (once only) or 'z' (once only) + or 't' (once only) (exclusive), '+' (once only), '#' (once only), - finished by a specifier + - 'r', that needs a color argument and expects a '%R' later, + - '{', that needs a URL argument and expects a '%}' later, - 'c', that needs a character argument, - 's', that needs a string argument, - '.NNNs', where NNN is a nonempty digit sequence, that needs a @@ -66,26 +74,47 @@ size, - 'o', 'u', 'x', that need an unsigned integer argument of the specified size, + - 'f', that needs a floating-point argument, - 'p', that needs a 'void *' argument, - - 'H', that needs a 'location_t *' argument, - - 'J', that needs a general declaration argument, - - 'K', that needs a statement argument, - [see gcc/pretty-print.c] + - '@', that needs a 'diagnostic_event_id_t *' argument, + - 'e', that needs a 'pp_element *' argument, + - 'Z', that needs an 'int *' argument and an 'unsigned int' argument, + [see gcc/pretty-print.cc] - 'D', that needs a general declaration argument, + - 'E', that needs an expression argument, - 'F', that needs a function declaration argument, - 'T', that needs a type argument, - - 'E', that needs an expression argument, - [see gcc/c-objc-common.c and gcc/cp/error.c] + [see gcc/tree-diagnostic.cc and gcc/c/c-objc-common.cc and + gcc/cp/error.cc] + + - 'V', that needs a tree argument with a list of type qualifiers, + [see gcc/c/c-objc-common.cc and gcc/cp/error.cc] + + - 'v', that needs a list of type qualifiers, + [see gcc/c/c-objc-common.cc] - 'A', that needs a function argument list argument, - - 'C', that needs a tree code argument, - - 'L', that needs a language argument, + - 'H', that needs a type argument and prints it specially + (as first type of a type difference), + - 'I', that needs a type argument and prints it specially + (as second type of a type difference), - 'O', that needs a binary operator argument, - - 'P', that needs a function parameter argument, + - 'P', that needs a function parameter index argument, - 'Q', that needs an assignment operator argument, - - 'V', that needs a const/volatile qualifier argument. - [see gcc/cp/error.c] + - 'S', that needs a substitution, + - 'X', that needs an exception, + [see gcc/cp/error.cc] + + - 'C', that needs a tree code argument in the cp/ front end [IGNORE!] + but no argument in the fortran/ front end, + - 'L', that needs a language identifier argument in the cp/ front end + or a locus argument in the fortran/ front end, + [see gcc/cp/error.cc and gcc/fortran/error.cc] + + Directives %< and %> should come in pairs; these pairs cannot be nested. + Directives %r and %R should come in pairs; these pairs cannot be nested. + Directives %{ and %} should come in pairs; these pairs cannot be nested. Numbered ('%m$' or '*m$') and unnumbered argument specifications cannot be used in the same string. */ @@ -96,29 +125,43 @@ enum format_arg_type /* Basic types */ FAT_INTEGER = 1, FAT_CHAR = 2, - FAT_STRING = 3, - FAT_POINTER = 4, - FAT_LOCATION = 5, + FAT_FLOAT = 3, + FAT_STRING = 4, + FAT_POINTER = 5, FAT_TREE = 6, FAT_TREE_CODE = 7, - FAT_LANGUAGES = 8, + FAT_EVENT_ID = 8, + FAT_ELEMENT = 9, + FAT_LANGUAGE_OR_LOCUS = 10, + FAT_CV = 11, + FAT_INT_ARRAY_PART1 = 12, + FAT_INT_ARRAY_PART2 = 13, + FAT_COLOR = 14, + FAT_URL = 15, /* Flags */ FAT_UNSIGNED = 1 << 4, FAT_SIZE_LONG = 1 << 5, FAT_SIZE_LONGLONG = 2 << 5, FAT_SIZE_WIDE = 3 << 5, - FAT_TREE_DECL = 1 << 7, - FAT_TREE_STATEMENT = 2 << 7, - FAT_TREE_FUNCDECL = 3 << 7, - FAT_TREE_TYPE = 4 << 7, - FAT_TREE_ARGUMENT = 5 << 7, - FAT_TREE_EXPRESSION = 6 << 7, - FAT_TREE_CV = 7 << 7, - FAT_TREE_CODE_BINOP = 1 << 10, - FAT_TREE_CODE_ASSOP = 2 << 10, - FAT_FUNCPARAM = 1 << 12, + FAT_SIZE_SIZE = 4 << 5, + FAT_SIZE_PTRDIFF = 5 << 5, + FAT_TREE_DECL = 1 << 8, + FAT_TREE_STATEMENT = 2 << 8, + FAT_TREE_FUNCDECL = 3 << 8, + FAT_TREE_TYPE = 4 << 8, + FAT_TREE_TYPE_DIFF1 = 5 << 8, + FAT_TREE_TYPE_DIFF2 = 6 << 8, + FAT_TREE_ARGUMENT = 7 << 8, + FAT_TREE_EXPRESSION = 8 << 8, + FAT_TREE_CV = 9 << 8, + FAT_TREE_SUBSTITUTION = 10 << 8, + FAT_TREE_EXCEPTION = 11 << 8, + FAT_TREE_CODE_BINOP = 1 << 12, + FAT_TREE_CODE_ASSOP = 2 << 12, + FAT_FUNCPARAM = 1 << 14, /* Bitmasks */ - FAT_SIZE_MASK = (FAT_SIZE_LONG | FAT_SIZE_LONGLONG | FAT_SIZE_WIDE) + FAT_SIZE_MASK = (FAT_SIZE_LONG | FAT_SIZE_LONGLONG + | FAT_SIZE_WIDE | FAT_SIZE_SIZE | FAT_SIZE_PTRDIFF) }; #ifdef __cplusplus typedef int format_arg_type_t; @@ -138,6 +181,7 @@ struct spec unsigned int numbered_arg_count; struct numbered_arg *numbered; bool uses_err_no; + bool uses_current_locus; }; @@ -164,6 +208,7 @@ format_parse (const char *format, bool translated, char *fdi, spec.numbered_arg_count = 0; spec.numbered = NULL; spec.uses_err_no = false; + spec.uses_current_locus = false; numbered_allocated = 0; unnumbered_arg_count = 0; @@ -176,16 +221,20 @@ format_parse (const char *format, bool translated, char *fdi, spec.directives++; if (*format == '%' || *format == '<' || *format == '>' - || *format == '\'') + || *format == '}' || *format == '\'' || *format == 'R') ; else if (*format == 'm') spec.uses_err_no = true; + else if (*format == 'C') + spec.uses_current_locus = true; else { unsigned int number = 0; unsigned int flag_q = 0; unsigned int flag_l = 0; unsigned int flag_w = 0; + unsigned int flag_z = 0; + unsigned int flag_t = 0; unsigned int flag_plus = 0; unsigned int flag_sharp = 0; format_arg_type_t size; @@ -227,15 +276,25 @@ format_parse (const char *format, bool translated, char *fdi, flag_q = 1; continue; case 'l': - if (flag_l > 1 || flag_w) + if (flag_l > 1 || flag_w || flag_z || flag_t) goto invalid_flags; flag_l++; continue; case 'w': - if (flag_w > 0 || flag_l) + if (flag_l || flag_w || flag_z || flag_t) goto invalid_flags; flag_w = 1; continue; + case 'z': + if (flag_l || flag_w || flag_z || flag_t) + goto invalid_flags; + flag_z = 1; + continue; + case 't': + if (flag_l || flag_w || flag_z || flag_t) + goto invalid_flags; + flag_t = 1; + continue; case '+': if (flag_plus > 0) goto invalid_flags; @@ -258,6 +317,8 @@ format_parse (const char *format, bool translated, char *fdi, size = (flag_l == 2 ? FAT_SIZE_LONGLONG : flag_l == 1 ? FAT_SIZE_LONG : flag_w ? FAT_SIZE_WIDE : + flag_z ? FAT_SIZE_SIZE : + flag_t ? FAT_SIZE_PTRDIFF : 0); if (*format == 'c') @@ -408,60 +469,66 @@ format_parse (const char *format, bool translated, char *fdi, type = FAT_INTEGER | size; else if (*format == 'o' || *format == 'u' || *format == 'x') type = FAT_INTEGER | FAT_UNSIGNED | size; + else if (*format == 'f') + type = FAT_FLOAT; else if (*format == 'p') type = FAT_POINTER; - else if (*format == 'H') - type = FAT_LOCATION; - else if (*format == 'J') + else if (*format == '@') + type = FAT_EVENT_ID; + else if (*format == 'e') + type = FAT_ELEMENT; + else if (*format == 'v') + type = FAT_CV; + else if (*format == 'Z') + type = FAT_INT_ARRAY_PART1; + else if (*format == 'r') + type = FAT_COLOR; + else if (*format == '{') + type = FAT_URL; + else if (*format == 'D') type = FAT_TREE | FAT_TREE_DECL; - else if (*format == 'K') - type = FAT_TREE | FAT_TREE_STATEMENT; + else if (*format == 'F') + type = FAT_TREE | FAT_TREE_FUNCDECL; + else if (*format == 'T') + type = FAT_TREE | FAT_TREE_TYPE; + else if (*format == 'H') + type = FAT_TREE | FAT_TREE_TYPE_DIFF1; + else if (*format == 'I') + type = FAT_TREE | FAT_TREE_TYPE_DIFF2; + else if (*format == 'E') + type = FAT_TREE | FAT_TREE_EXPRESSION; + else if (*format == 'A') + type = FAT_TREE | FAT_TREE_ARGUMENT; + else if (*format == 'C') + type = FAT_TREE_CODE; + else if (*format == 'L') + type = FAT_LANGUAGE_OR_LOCUS; + else if (*format == 'O') + type = FAT_TREE_CODE | FAT_TREE_CODE_BINOP; + else if (*format == 'P') + type = FAT_INTEGER | FAT_FUNCPARAM; + else if (*format == 'Q') + type = FAT_TREE_CODE | FAT_TREE_CODE_ASSOP; + else if (*format == 'V') + type = FAT_TREE | FAT_TREE_CV; + else if (*format == 'S') + type = FAT_TREE | FAT_TREE_SUBSTITUTION; + else if (*format == 'X') + type = FAT_TREE | FAT_TREE_EXCEPTION; else { - if (*format == 'D') - type = FAT_TREE | FAT_TREE_DECL; - else if (*format == 'F') - type = FAT_TREE | FAT_TREE_FUNCDECL; - else if (*format == 'T') - type = FAT_TREE | FAT_TREE_TYPE; - else if (*format == 'E') - type = FAT_TREE | FAT_TREE_EXPRESSION; - else if (*format == 'A') - type = FAT_TREE | FAT_TREE_ARGUMENT; - else if (*format == 'C') - type = FAT_TREE_CODE; - else if (*format == 'L') - type = FAT_LANGUAGES; - else if (*format == 'O') - type = FAT_TREE_CODE | FAT_TREE_CODE_BINOP; - else if (*format == 'P') - type = FAT_INTEGER | FAT_FUNCPARAM; - else if (*format == 'Q') - type = FAT_TREE_CODE | FAT_TREE_CODE_ASSOP; - else if (*format == 'V') - type = FAT_TREE | FAT_TREE_CV; + if (*format == '\0') + { + *invalid_reason = INVALID_UNTERMINATED_DIRECTIVE (); + FDI_SET (format - 1, FMTDIR_ERROR); + } else { - if (*format == '\0') - { - *invalid_reason = INVALID_UNTERMINATED_DIRECTIVE (); - FDI_SET (format - 1, FMTDIR_ERROR); - } - else - { - *invalid_reason = - (*format == 'c' - || *format == 's' - || *format == 'i' || *format == 'd' - || *format == 'o' || *format == 'u' || *format == 'x' - || *format == 'H' - ? xasprintf (_("In the directive number %u, flags are not allowed before '%c'."), spec.directives, *format) - : INVALID_CONVERSION_SPECIFIER (spec.directives, - *format)); - FDI_SET (format, FMTDIR_ERROR); - } - goto bad_format; + *invalid_reason = + INVALID_CONVERSION_SPECIFIER (spec.directives, *format); + FDI_SET (format, FMTDIR_ERROR); } + goto bad_format; } if (number) @@ -484,6 +551,18 @@ format_parse (const char *format, bool translated, char *fdi, spec.numbered[spec.numbered_arg_count].number = number; spec.numbered[spec.numbered_arg_count].type = type; spec.numbered_arg_count++; + + if (type == FAT_INT_ARRAY_PART1) + { + if (numbered_allocated == spec.numbered_arg_count) + { + numbered_allocated = 2 * numbered_allocated + 1; + spec.numbered = (struct numbered_arg *) xrealloc (spec.numbered, numbered_allocated * sizeof (struct numbered_arg)); + } + spec.numbered[spec.numbered_arg_count].number = number + 1; + spec.numbered[spec.numbered_arg_count].type = FAT_INT_ARRAY_PART2; + spec.numbered_arg_count++; + } } else { @@ -505,6 +584,18 @@ format_parse (const char *format, bool translated, char *fdi, spec.numbered[unnumbered_arg_count].number = unnumbered_arg_count + 1; spec.numbered[unnumbered_arg_count].type = type; unnumbered_arg_count++; + + if (type == FAT_INT_ARRAY_PART1) + { + if (numbered_allocated == unnumbered_arg_count) + { + numbered_allocated = 2 * numbered_allocated + 1; + spec.numbered = (struct numbered_arg *) xrealloc (spec.numbered, numbered_allocated * sizeof (struct numbered_arg)); + } + spec.numbered[unnumbered_arg_count].number = unnumbered_arg_count + 1; + spec.numbered[unnumbered_arg_count].type = FAT_INT_ARRAY_PART2; + unnumbered_arg_count++; + } } } @@ -683,6 +774,23 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, err = true; } + /* Check that the use of current_locus is the same. */ + if (spec1->uses_current_locus != spec2->uses_current_locus) + { + if (error_logger) + { + if (spec1->uses_current_locus) + error_logger (error_logger_data, + _("'%s' uses %%C but '%s' doesn't"), + pretty_msgid, pretty_msgstr); + else + error_logger (error_logger_data, + _("'%s' does not use %%C but '%s' uses %%C"), + pretty_msgid, pretty_msgstr); + } + err = true; + } + return err; } @@ -744,6 +852,12 @@ format_print (void *descr) case FAT_SIZE_WIDE: printf ("[host-wide]"); break; + case FAT_SIZE_SIZE: + printf ("[host-size_t]"); + break; + case FAT_SIZE_PTRDIFF: + printf ("[host-ptrdiff_t]"); + break; default: abort (); } @@ -758,14 +872,35 @@ format_print (void *descr) case FAT_CHAR: printf ("c"); break; + case FAT_FLOAT: + printf ("f"); + break; case FAT_STRING: printf ("s"); break; case FAT_POINTER: printf ("p"); break; - case FAT_LOCATION: - printf ("H"); + case FAT_EVENT_ID: + printf ("@"); + break; + case FAT_ELEMENT: + printf ("e"); + break; + case FAT_CV: + printf ("v"); + break; + case FAT_INT_ARRAY_PART1: + printf ("Z1"); + break; + case FAT_INT_ARRAY_PART2: + printf ("Z2"); + break; + case FAT_COLOR: + printf ("r"); + break; + case FAT_URL: + printf ("{"); break; case FAT_TREE | FAT_TREE_DECL: printf ("D"); @@ -779,6 +914,12 @@ format_print (void *descr) case FAT_TREE | FAT_TREE_TYPE: printf ("T"); break; + case FAT_TREE | FAT_TREE_TYPE_DIFF1: + printf ("H"); + break; + case FAT_TREE | FAT_TREE_TYPE_DIFF2: + printf ("I"); + break; case FAT_TREE | FAT_TREE_ARGUMENT: printf ("A"); break; @@ -788,6 +929,12 @@ format_print (void *descr) case FAT_TREE | FAT_TREE_CV: printf ("V"); break; + case FAT_TREE | FAT_TREE_SUBSTITUTION: + printf ("S"); + break; + case FAT_TREE | FAT_TREE_EXCEPTION: + printf ("X"); + break; case FAT_TREE_CODE: printf ("C"); break; @@ -797,7 +944,7 @@ format_print (void *descr) case FAT_TREE_CODE | FAT_TREE_CODE_ASSOP: printf ("Q"); break; - case FAT_LANGUAGES: + case FAT_LANGUAGE_OR_LOCUS: printf ("L"); break; default: @@ -808,6 +955,8 @@ format_print (void *descr) printf (")"); if (spec->uses_err_no) printf (" ERR_NO"); + if (spec->uses_current_locus) + printf (" CURRENT_LOCUS"); } int diff --git a/gettext-tools/tests/format-gcc-internal-1 b/gettext-tools/tests/format-gcc-internal-1 index b0f3dd8a8..482e8f404 100755 --- a/gettext-tools/tests/format-gcc-internal-1 +++ b/gettext-tools/tests/format-gcc-internal-1 @@ -11,9 +11,17 @@ cat <<\EOF > f-gi-1.data # Valid: no argument "abc%>" # Valid: no argument +"abc%}" +# Valid: no argument "abc%'" # Valid: no argument +"abc%R" +# Valid: no argument "abc%m" +# Valid: one color argument +"abc%r" +# Valid: one URL argument +"abc%{" # Valid: one character argument "abc%c" # Valid: one string argument @@ -30,32 +38,32 @@ cat <<\EOF > f-gi-1.data "abc%x" # Valid: one integer and one string argument "abc%.*s" +# Valid: one floating-point argument +"abc%f" # Valid: one pointer argument "abc%p" # Valid: one pointer argument -"abc%H" +"abc%@" # Valid: one pointer argument -"%J" -# Valid: %J not at start -"abc%J" -# Valid: %J with flags -"%qJ" -# Valid: %K with flags -"%qK" +"abc%e" +# Valid: one pointer and one pointer argument +"abc%Z" # Valid: one pointer argument "abc%D" # Valid: one pointer argument +"abc%E" +# Valid: one pointer argument "abc%F" # Valid: one pointer argument "abc%T" # Valid: one pointer argument -"abc%A" -# Valid: one pointer argument -"abc%C" +"abc%V" # Valid: one pointer argument -"abc%E" +"abc%v" # Valid: one pointer argument -"abc%L" +"abc%A" +# Valid: two pointer arguments +"abc%H-%I" # Valid: one pointer argument "abc%O" # Valid: one pointer argument @@ -63,7 +71,13 @@ cat <<\EOF > f-gi-1.data # Valid: one pointer argument "abc%Q" # Valid: one pointer argument -"abc%V" +"abc%S" +# Valid: one pointer argument +"abc%X" +# Valid: possibly one pointer argument +"abc%C" +# Valid: one pointer argument +"abc%L" # Valid: one argument with flags "abc%qdef" # Valid: one argument with flags @@ -76,6 +90,10 @@ cat <<\EOF > f-gi-1.data "abc%llli" # Valid: one argument with size specifier "abc%wi" +# Valid: one argument with size specifier +"abc%zi" +# Valid: one argument with size specifier +"abc%ti" # Invalid: unterminated "abc%" # Invalid: unknown format specifier diff --git a/gettext-tools/tests/format-gcc-internal-2 b/gettext-tools/tests/format-gcc-internal-2 index c0b604554..5114a4f56 100755 --- a/gettext-tools/tests/format-gcc-internal-2 +++ b/gettext-tools/tests/format-gcc-internal-2 @@ -26,11 +26,11 @@ msgstr "xyz%muvw" msgid "abc%%def" msgstr "xyz%" # Valid: same arguments -msgid "abc%s%Hdef" -msgstr "xyz%s%H" +msgid "abc%s%Ddef" +msgstr "xyz%s%D" # Valid: same arguments, with different flags -msgid "abc%s%Hdef" -msgstr "xyz%qs%qH" +msgid "abc%s%Ddef" +msgstr "xyz%qs%qD" # Valid: same arguments, with different widths msgid "abc%.*sdef" msgstr "xyz%i%s" @@ -71,6 +71,159 @@ msgstr "xyz%u" msgid "abc%u" msgstr "xyz%x" # Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%{" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%c" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%s" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%i" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%u" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%f" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%p" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%Z" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%D" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%F" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%T" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%V" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%r" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%c" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%s" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%i" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%u" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%f" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%p" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%Z" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%D" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%F" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%T" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%V" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%{" +msgstr "xyz%L" +# Invalid: type incompatibility msgid "abc%c" msgstr "xyz%s" # Invalid: type incompatibility @@ -81,31 +234,46 @@ msgid "abc%c" msgstr "xyz%u" # Invalid: type incompatibility msgid "abc%c" +msgstr "xyz%f" +# Invalid: type incompatibility +msgid "abc%c" msgstr "xyz%p" # Invalid: type incompatibility msgid "abc%c" -msgstr "xyz%H" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%c" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%c" +msgstr "xyz%Z" # Invalid: type incompatibility msgid "abc%c" msgstr "xyz%D" # Invalid: type incompatibility msgid "abc%c" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%c" msgstr "xyz%F" # Invalid: type incompatibility msgid "abc%c" msgstr "xyz%T" # Invalid: type incompatibility msgid "abc%c" -msgstr "xyz%A" +msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%c" -msgstr "xyz%C" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%c" -msgstr "xyz%E" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%c" -msgstr "xyz%L" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%c" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%c" msgstr "xyz%O" @@ -117,7 +285,16 @@ msgid "abc%c" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%c" -msgstr "xyz%V" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%c" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%c" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%c" +msgstr "xyz%L" # Invalid: type incompatibility msgid "abc%s" msgstr "xyz%i" @@ -126,31 +303,46 @@ msgid "abc%s" msgstr "xyz%u" # Invalid: type incompatibility msgid "abc%s" +msgstr "xyz%f" +# Invalid: type incompatibility +msgid "abc%s" msgstr "xyz%p" # Invalid: type incompatibility msgid "abc%s" -msgstr "xyz%H" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%s" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%s" +msgstr "xyz%Z" # Invalid: type incompatibility msgid "abc%s" msgstr "xyz%D" # Invalid: type incompatibility msgid "abc%s" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%s" msgstr "xyz%F" # Invalid: type incompatibility msgid "abc%s" msgstr "xyz%T" # Invalid: type incompatibility msgid "abc%s" -msgstr "xyz%A" +msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%s" -msgstr "xyz%C" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%s" -msgstr "xyz%E" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%s" -msgstr "xyz%L" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%s" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%s" msgstr "xyz%O" @@ -162,37 +354,61 @@ msgid "abc%s" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%s" -msgstr "xyz%V" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%s" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%s" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%s" +msgstr "xyz%L" # Invalid: type incompatibility msgid "abc%i" msgstr "xyz%u" # Invalid: type incompatibility msgid "abc%i" +msgstr "xyz%f" +# Invalid: type incompatibility +msgid "abc%i" msgstr "xyz%p" # Invalid: type incompatibility msgid "abc%i" -msgstr "xyz%H" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%i" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%i" +msgstr "xyz%Z" # Invalid: type incompatibility msgid "abc%i" msgstr "xyz%D" # Invalid: type incompatibility msgid "abc%i" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%i" msgstr "xyz%F" # Invalid: type incompatibility msgid "abc%i" msgstr "xyz%T" # Invalid: type incompatibility msgid "abc%i" -msgstr "xyz%A" +msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%i" -msgstr "xyz%C" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%i" -msgstr "xyz%E" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%i" -msgstr "xyz%L" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%i" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%i" msgstr "xyz%O" @@ -204,34 +420,58 @@ msgid "abc%i" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%i" -msgstr "xyz%V" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%i" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%i" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%i" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%u" +msgstr "xyz%f" # Invalid: type incompatibility msgid "abc%u" msgstr "xyz%p" # Invalid: type incompatibility msgid "abc%u" -msgstr "xyz%H" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%u" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%u" +msgstr "xyz%Z" # Invalid: type incompatibility msgid "abc%u" msgstr "xyz%D" # Invalid: type incompatibility msgid "abc%u" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%u" msgstr "xyz%F" # Invalid: type incompatibility msgid "abc%u" msgstr "xyz%T" # Invalid: type incompatibility msgid "abc%u" -msgstr "xyz%A" +msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%u" -msgstr "xyz%C" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%u" -msgstr "xyz%E" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%u" -msgstr "xyz%L" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%u" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%u" msgstr "xyz%O" @@ -243,31 +483,112 @@ msgid "abc%u" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%u" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%u" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%u" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%u" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%p" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%Z" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%D" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%F" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%T" +# Invalid: type incompatibility +msgid "abc%f" msgstr "xyz%V" # Invalid: type incompatibility -msgid "abc%p" +msgid "abc%f" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%f" msgstr "xyz%H" # Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%f" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%p" +msgstr "xyz%@" +# Invalid: type incompatibility +msgid "abc%p" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%p" +msgstr "xyz%Z" +# Invalid: type incompatibility msgid "abc%p" msgstr "xyz%D" # Invalid: type incompatibility msgid "abc%p" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%p" msgstr "xyz%F" # Invalid: type incompatibility msgid "abc%p" msgstr "xyz%T" # Invalid: type incompatibility msgid "abc%p" -msgstr "xyz%A" +msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%p" -msgstr "xyz%C" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%p" -msgstr "xyz%E" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%p" -msgstr "xyz%L" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%p" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%p" msgstr "xyz%O" @@ -279,41 +600,173 @@ msgid "abc%p" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%p" -msgstr "xyz%V" +msgstr "xyz%S" # Invalid: type incompatibility -msgid "abc%H" -msgstr "xyz%D" +msgid "abc%p" +msgstr "xyz%X" # Invalid: type incompatibility -msgid "abc%H" -msgstr "xyz%F" +msgid "abc%p" +msgstr "xyz%C" # Invalid: type incompatibility -msgid "abc%H" -msgstr "xyz%T" +msgid "abc%p" +msgstr "xyz%L" # Invalid: type incompatibility -msgid "abc%H" +msgid "abc%@" +msgstr "xyz%e" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%Z" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%D" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%F" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%T" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%V" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%@" msgstr "xyz%A" # Invalid: type incompatibility -msgid "abc%H" +msgid "abc%@" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%@" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%@" msgstr "xyz%C" # Invalid: type incompatibility -msgid "abc%H" +msgid "abc%@" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%Z" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%D" +# Invalid: type incompatibility +msgid "abc%e" msgstr "xyz%E" # Invalid: type incompatibility -msgid "abc%H" -msgstr "xyz%L" +msgid "abc%e" +msgstr "xyz%F" # Invalid: type incompatibility -msgid "abc%H" +msgid "abc%e" +msgstr "xyz%T" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%V" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%e" msgstr "xyz%O" # Invalid: type incompatibility -msgid "abc%H" +msgid "abc%e" msgstr "xyz%P" # Invalid: type incompatibility -msgid "abc%H" +msgid "abc%e" msgstr "xyz%Q" # Invalid: type incompatibility -msgid "abc%H" +msgid "abc%e" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%e" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%D" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%E" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%F" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%T" +# Invalid: type incompatibility +msgid "abc%Z" msgstr "xyz%V" # Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%Z" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%D" +msgstr "xyz%E" +# Invalid: type incompatibility msgid "abc%D" msgstr "xyz%F" # Invalid: type incompatibility @@ -321,16 +774,19 @@ msgid "abc%D" msgstr "xyz%T" # Invalid: type incompatibility msgid "abc%D" -msgstr "xyz%A" +msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%D" -msgstr "xyz%C" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%D" -msgstr "xyz%E" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%D" -msgstr "xyz%L" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%D" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%D" msgstr "xyz%O" @@ -342,22 +798,76 @@ msgid "abc%D" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%D" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%D" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%D" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%D" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%F" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%T" +# Invalid: type incompatibility +msgid "abc%E" msgstr "xyz%V" # Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%E" +msgstr "xyz%L" +# Invalid: type incompatibility msgid "abc%F" msgstr "xyz%T" # Invalid: type incompatibility msgid "abc%F" -msgstr "xyz%A" +msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%F" -msgstr "xyz%C" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%F" -msgstr "xyz%E" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%F" -msgstr "xyz%L" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%F" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%F" msgstr "xyz%O" @@ -369,19 +879,31 @@ msgid "abc%F" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%F" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%F" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%F" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%F" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%T" msgstr "xyz%V" # Invalid: type incompatibility msgid "abc%T" -msgstr "xyz%A" +msgstr "xyz%v" # Invalid: type incompatibility msgid "abc%T" -msgstr "xyz%C" +msgstr "xyz%A" # Invalid: type incompatibility msgid "abc%T" -msgstr "xyz%E" +msgstr "xyz%H" # Invalid: type incompatibility msgid "abc%T" -msgstr "xyz%L" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%T" msgstr "xyz%O" @@ -393,16 +915,85 @@ msgid "abc%T" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%T" -msgstr "xyz%V" +msgstr "xyz%S" # Invalid: type incompatibility -msgid "abc%A" +msgid "abc%T" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%T" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%T" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%v" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%V" msgstr "xyz%C" # Invalid: type incompatibility +msgid "abc%V" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%A" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%H" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%O" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%P" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%Q" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%v" +msgstr "xyz%L" +# Invalid: type incompatibility msgid "abc%A" -msgstr "xyz%E" +msgstr "xyz%H" # Invalid: type incompatibility msgid "abc%A" -msgstr "xyz%L" +msgstr "xyz%I" # Invalid: type incompatibility msgid "abc%A" msgstr "xyz%O" @@ -414,70 +1005,124 @@ msgid "abc%A" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%A" -msgstr "xyz%V" +msgstr "xyz%S" # Invalid: type incompatibility -msgid "abc%C" -msgstr "xyz%E" +msgid "abc%A" +msgstr "xyz%X" # Invalid: type incompatibility -msgid "abc%C" +msgid "abc%A" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%A" msgstr "xyz%L" # Invalid: type incompatibility -msgid "abc%C" +msgid "abc%H" +msgstr "xyz%I" +# Invalid: type incompatibility +msgid "abc%H" msgstr "xyz%O" # Invalid: type incompatibility -msgid "abc%C" +msgid "abc%H" msgstr "xyz%P" # Invalid: type incompatibility -msgid "abc%C" +msgid "abc%H" msgstr "xyz%Q" # Invalid: type incompatibility -msgid "abc%C" -msgstr "xyz%V" +msgid "abc%H" +msgstr "xyz%S" # Invalid: type incompatibility -msgid "abc%E" +msgid "abc%H" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%H" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%H" msgstr "xyz%L" # Invalid: type incompatibility -msgid "abc%E" +msgid "abc%I" msgstr "xyz%O" # Invalid: type incompatibility -msgid "abc%E" +msgid "abc%I" msgstr "xyz%P" # Invalid: type incompatibility -msgid "abc%E" +msgid "abc%I" msgstr "xyz%Q" # Invalid: type incompatibility -msgid "abc%E" -msgstr "xyz%V" +msgid "abc%I" +msgstr "xyz%S" # Invalid: type incompatibility -msgid "abc%L" -msgstr "xyz%O" +msgid "abc%I" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%I" +msgstr "xyz%C" # Invalid: type incompatibility -msgid "abc%L" +msgid "abc%I" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%O" msgstr "xyz%P" # Invalid: type incompatibility -msgid "abc%L" +msgid "abc%O" msgstr "xyz%Q" # Invalid: type incompatibility -msgid "abc%L" -msgstr "xyz%V" +msgid "abc%O" +msgstr "xyz%S" # Invalid: type incompatibility msgid "abc%O" -msgstr "xyz%P" +msgstr "xyz%X" # Invalid: type incompatibility msgid "abc%O" -msgstr "xyz%Q" +msgstr "xyz%C" # Invalid: type incompatibility msgid "abc%O" -msgstr "xyz%V" +msgstr "xyz%L" # Invalid: type incompatibility msgid "abc%P" msgstr "xyz%Q" # Invalid: type incompatibility msgid "abc%P" -msgstr "xyz%V" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%P" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%P" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%P" +msgstr "xyz%L" # Invalid: type incompatibility msgid "abc%Q" -msgstr "xyz%V" +msgstr "xyz%S" +# Invalid: type incompatibility +msgid "abc%Q" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%Q" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%Q" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%S" +msgstr "xyz%X" +# Invalid: type incompatibility +msgid "abc%S" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%S" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%X" +msgstr "xyz%C" +# Invalid: type incompatibility +msgid "abc%X" +msgstr "xyz%L" +# Invalid: type incompatibility +msgid "abc%C" +msgstr "xyz%L" # Invalid: type incompatibility due to size msgid "abc%i" msgstr "xyz%li" @@ -488,14 +1133,41 @@ msgstr "xyz%lli" msgid "abc%i" msgstr "xyz%wi" # Invalid: type incompatibility due to size +msgid "abc%i" +msgstr "xyz%zi" +# Invalid: type incompatibility due to size +msgid "abc%i" +msgstr "xyz%ti" +# Invalid: type incompatibility due to size msgid "abc%li" msgstr "xyz%lli" # Invalid: type incompatibility due to size msgid "abc%li" msgstr "xyz%wi" # Invalid: type incompatibility due to size +msgid "abc%li" +msgstr "xyz%zi" +# Invalid: type incompatibility due to size +msgid "abc%li" +msgstr "xyz%ti" +# Invalid: type incompatibility due to size msgid "abc%lli" msgstr "xyz%wi" +# Invalid: type incompatibility due to size +msgid "abc%lli" +msgstr "xyz%zi" +# Invalid: type incompatibility due to size +msgid "abc%lli" +msgstr "xyz%ti" +# Invalid: type incompatibility due to size +msgid "abc%wi" +msgstr "xyz%zi" +# Invalid: type incompatibility due to size +msgid "abc%wi" +msgstr "xyz%ti" +# Invalid: type incompatibility due to size +msgid "abc%zi" +msgstr "xyz%ti" # Invalid: type incompatibility for width msgid "abc%.*s" msgstr "xyz%u%s"