PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/gcc/testsuite/gcc.dg/format/ms_c99-printf-1.c

https://bitbucket.org/tari/prizm-gcc
C | 109 lines | 81 code | 2 blank | 26 comment | 0 complexity | 1b311952c69a9f800f47207c755a2ed5 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0, GPL-2.0, LGPL-2.1, AGPL-1.0, GPL-3.0
  1. /* Test for printf formats. Formats using C99 features, including cases
  2. where C99 specifies some aspect of the format to be ignored or where
  3. the behavior is undefined.
  4. */
  5. /* Origin: Joseph Myers <jsm28@cam.ac.uk> */
  6. /* { dg-do compile { target { *-*-mingw* } } } */
  7. /* { dg-options "-std=iso9899:1999 -pedantic -Wformat" } */
  8. #define USE_SYSTEM_FORMATS
  9. #include "format.h"
  10. void
  11. foo (int i, unsigned int u, double d, char *s, void *p, int *n,
  12. long double ld, wint_t lc, wchar_t *ls, long long int ll,
  13. unsigned long long int ull, signed char *ss, unsigned char *us,
  14. long long int *lln, intmax_t j, uintmax_t uj, intmax_t *jn,
  15. size_t z, signed_size_t sz, signed_size_t *zn,
  16. ptrdiff_t t, ptrdiff_t *tn)
  17. {
  18. /* See ISO/IEC 9899:1999 (E) subclause 7.19.6.1 (pages 273-281).
  19. We do not repeat here most of the checks for correct C90 formats
  20. or completely broken formats.
  21. */
  22. /* Valid and invalid %h, %hh, %l, %j, %z, %t, %L constructions. */
  23. printf ("%hf", d); /* { dg-warning "length" "bad use of %h" } */
  24. printf ("%hF", d); /* { dg-warning "unknown|format" "bad use of %hF" } */
  25. printf ("%he", d); /* { dg-warning "length" "bad use of %h" } */
  26. printf ("%hE", d); /* { dg-warning "length" "bad use of %h" } */
  27. printf ("%hg", d); /* { dg-warning "length" "bad use of %h" } */
  28. printf ("%hG", d); /* { dg-warning "length" "bad use of %h" } */
  29. printf ("%ha", d); /* { dg-warning "unknown|format" "bad use of %ha" } */
  30. printf ("%hA", d); /* { dg-warning "unknown|format" "bad use of %hA" } */
  31. printf ("%hc", i);
  32. printf ("%hs", (short *)s);
  33. printf ("%hp", p); /* { dg-warning "length" "bad use of %h" } */
  34. printf ("%lc", lc);
  35. printf ("%ls", ls);
  36. printf ("%lp", p); /* { dg-warning "length|C" "bad use of %l" } */
  37. /* Valid uses of each bare conversion. */
  38. printf ("%d%i%o%u%x%X%f%e%E%g%G%c%s%p%n%%", i, i, u, u, u, u,
  39. d, d, d, d, d, i, s, p, n);
  40. /* Uses of the - flag (valid on all non-%, non-n conversions). */
  41. printf ("%-d%-i%-o%-u%-x%-X%-f%-e%-E%-g%-G%-c%-s%-p", i, i,
  42. u, u, u, u, d, d, d, d, d, i, s, p);
  43. printf ("%-n", n); /* { dg-warning "flag" "bad use of %-n" } */
  44. /* Uses of the + flag (valid on signed conversions only). */
  45. printf ("%+d%+i%+f%+e%+E%+g%+G\n", i, i, d, d, d, d, d);
  46. printf ("%+o", u); /* { dg-warning "flag" "bad use of + flag" } */
  47. printf ("%+u", u); /* { dg-warning "flag" "bad use of + flag" } */
  48. printf ("%+x", u); /* { dg-warning "flag" "bad use of + flag" } */
  49. printf ("%+X", u); /* { dg-warning "flag" "bad use of + flag" } */
  50. printf ("%+c", i); /* { dg-warning "flag" "bad use of + flag" } */
  51. printf ("%+s", s); /* { dg-warning "flag" "bad use of + flag" } */
  52. printf ("%+p", p); /* { dg-warning "flag" "bad use of + flag" } */
  53. printf ("%+n", n); /* { dg-warning "flag" "bad use of + flag" } */
  54. /* Uses of the space flag (valid on signed conversions only, and ignored
  55. with +).
  56. */
  57. printf ("% +d", i); /* { dg-warning "use of both|ignored" "use of space and + flags" } */
  58. printf ("%+ d", i); /* { dg-warning "use of both|ignored" "use of space and + flags" } */
  59. printf ("% d% i% f% e% E% g% G\n", i, i, d, d, d, d, d);
  60. printf ("% o", u); /* { dg-warning "flag" "bad use of space flag" } */
  61. printf ("% u", u); /* { dg-warning "flag" "bad use of space flag" } */
  62. printf ("% x", u); /* { dg-warning "flag" "bad use of space flag" } */
  63. printf ("% X", u); /* { dg-warning "flag" "bad use of space flag" } */
  64. printf ("% c", i); /* { dg-warning "flag" "bad use of space flag" } */
  65. printf ("% s", s); /* { dg-warning "flag" "bad use of space flag" } */
  66. printf ("% p", p); /* { dg-warning "flag" "bad use of space flag" } */
  67. printf ("% n", n); /* { dg-warning "flag" "bad use of space flag" } */
  68. /* Uses of the # flag. */
  69. printf ("%#o%#x%#X%#e%#E%#f%#g%#G", u, u, u, d, d, d,
  70. d, d);
  71. printf ("%#d", i); /* { dg-warning "flag" "bad use of # flag" } */
  72. printf ("%#i", i); /* { dg-warning "flag" "bad use of # flag" } */
  73. printf ("%#u", u); /* { dg-warning "flag" "bad use of # flag" } */
  74. printf ("%#c", i); /* { dg-warning "flag" "bad use of # flag" } */
  75. printf ("%#s", s); /* { dg-warning "flag" "bad use of # flag" } */
  76. printf ("%#p", p); /* { dg-warning "flag" "bad use of # flag" } */
  77. printf ("%#n", n); /* { dg-warning "flag" "bad use of # flag" } */
  78. /* Uses of the 0 flag. */
  79. printf ("%08d%08i%08o%08u%08x%08X%08e%08E%08f%08g%08G", i, i,
  80. u, u, u, u, d, d, d, d, d);
  81. printf ("%0c", i); /* { dg-warning "flag" "bad use of 0 flag" } */
  82. printf ("%0s", s); /* { dg-warning "flag" "bad use of 0 flag" } */
  83. printf ("%0p", p); /* { dg-warning "flag" "bad use of 0 flag" } */
  84. printf ("%0n", n); /* { dg-warning "flag" "bad use of 0 flag" } */
  85. /* 0 flag ignored with - flag. */
  86. printf ("%-08d", i); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  87. printf ("%-08i", i); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  88. printf ("%-08o", u); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  89. printf ("%-08u", u); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  90. printf ("%-08x", u); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  91. printf ("%-08X", u); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  92. printf ("%-08e", d); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  93. printf ("%-08E", d); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  94. printf ("%-08f", d); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  95. printf ("%-08F", d); /* { dg-warning "unknown|format" "0 flag ignored with - flag" } */
  96. printf ("%-08g", d); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  97. printf ("%-08G", d); /* { dg-warning "flags|ignored" "0 flag ignored with - flag" } */
  98. printf ("%-08a", d); /* { dg-warning "unknown|format" "0 flag ignored with - flag" } */
  99. printf ("%-08A", d); /* { dg-warning "unknown|format" "0 flag ignored with - flag" } */
  100. /* Various tests of bad argument types. Mostly covered in c90-printf-1.c;
  101. here just test for pointer target sign with %hhn. (Probably allowed
  102. by the standard, but a bad idea, so GCC should diagnose if what
  103. is used is not signed char *.)
  104. */
  105. printf ("%hhn", s); /* { dg-warning "unknown|format" "%hhn is unsupported" } */
  106. printf ("%hhn", us); /* { dg-warning "unknown|format" "%hhn is unsupported" } */
  107. }