Macro expander [4 / 4] Testsuite

Neil Booth NeilB@earthling.net
Wed Oct 25 16:10:00 GMT 2000


	* gcc.dg/cpp/19960224-2.c, 20000625-2.c, cxxcom2.c, directiv.c,
	endif.c, if-4.c, if-5.c, if-mop.c, macsyntx.c, paste2.c, paste6.c,
	paste8.c, redef2.c, strify2.c, strp1.c, tr-warn1.c, tr-warn3.c,
	tr-warn6.c, undef1.c, undef2.c, widestr1.c: Update tests for
	new diagnostic messages.

	* gcc.dg/cpp/macro3.c: New tests.

Index: testsuite/gcc.dg/cpp/19960224-2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/19960224-2.c,v
retrieving revision 1.1
diff -u -p -r1.1 19960224-2.c
--- 19960224-2.c	2000/06/29 03:10:01	1.1
+++ 19960224-2.c	2000/10/25 17:53:22
@@ -2,5 +2,5 @@
 
 #if 0
 #if 0
-#endif /	/* { dg-error "text after #endif" "text after #endif" } */
+#endif /	/* { dg-warning "extra tokens" "extra tokens after #endif" } */
 #endif
Index: testsuite/gcc.dg/cpp/20000625-2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/20000625-2.c,v
retrieving revision 1.5
diff -u -p -r1.5 20000625-2.c
--- 20000625-2.c	2000/08/05 00:46:16	1.5
+++ 20000625-2.c	2000/10/25 17:53:24
@@ -1,17 +1,17 @@
 /* More paste corner cases from glibc.  */
 /* { dg-do run } */
 
+#include <stdlib.h>
+#include <string.h>
+
 #define symbol_version(name, version) name##@##version
 #define str(x) xstr(x)
 #define xstr(x) #x
 
 const char a[] = str(symbol_version(getrlimit, GLIBC_2.0));
-/* { dg-warning "valid preprocessing token" "" { target *-*-* } 8 } */
+/* { dg-warning "valid preprocessing token" "" { target *-*-* } 11 } */
 const char b[] = str(getrlimit@GLIBC_2.0);
 const char c[] = "getrlimit@GLIBC_2.0";
-
-#include <stdlib.h>
-#include <string.h>
 
 int
 main(void)
Index: testsuite/gcc.dg/cpp/cxxcom2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/cxxcom2.c,v
retrieving revision 1.1
diff -u -p -r1.1 cxxcom2.c
--- cxxcom2.c	2000/06/27 22:26:11	1.1
+++ cxxcom2.c	2000/10/25 17:53:24
@@ -2,7 +2,7 @@
 /* { dg-options "-pedantic -std=c89" } */
 
 /* This is an extension and therefore gets a warning.  */
-#line 5 "cxx-comments-2.c" 3  /* { dg-warning "garbage at end" "#line extension" } */
+#line 5 "cxx-comments-2.c" 3  /* { dg-warning "extra tokens" "#line extension" } */
 
 /* A system header may contain C++ comments irrespective of mode.  */
 // C++ comment is not in C89  { dg-bogus "style comment" "bad warning" }
Index: testsuite/gcc.dg/cpp/directiv.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/directiv.c,v
retrieving revision 1.2
diff -u -p -r1.2 directiv.c
--- directiv.c	2000/07/19 20:18:07	1.2
+++ directiv.c	2000/10/25 17:53:24
@@ -28,8 +28,8 @@ EMPTY #define bar
 /* Check that directives always start a line, even if in middle of
    macro expansion.  */
 #define func(x) x
-func (2				/* { dg-error "unterminated argument" }  */
-#define foobar			/* { dg-error "may not be used inside" } */
+func (2		/* { dg-error "unterminated" "" { target *-*-* } 32 } */
+#define foobar	/* { dg-error "directives may not" } */
 
 /* For tidiness, I think the directive should still be processed
    above.  Certainly, continuing to try to find the closing ')' can
Index: testsuite/gcc.dg/cpp/endif.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/endif.c,v
retrieving revision 1.1
diff -u -p -r1.1 endif.c
--- endif.c	2000/06/27 22:26:11	1.1
+++ endif.c	2000/10/25 17:53:24
@@ -4,12 +4,12 @@
 /* You can't get away with this in your own code... */
 #ifdef KERNEL
 #define foo
-#endif KERNEL  /* { dg-warning "forbids text after" "good warning" } */
+#endif KERNEL  /* { dg-warning "extra tokens" "good warning" } */
 
 /* This will provoke a warning because the '3' is an extension.  */
-#line 10 "endif-label.c" 3 /* { dg-warning "garbage at end" "#line extension" } */
+#line 10 "endif-label.c" 3 /* { dg-warning "extra tokens" "#line extension" } */
 
 /* ... but in a system header, it's acceptable.  */
 #ifdef KERNEL
 #define foo
-#endif KERNEL  /* { dg-bogus "forbids text after" "bad warning" } */
+#endif KERNEL  /* { dg-bogus "extra tokens" "bad warning" } */
Index: testsuite/gcc.dg/cpp/if-4.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/if-4.c,v
retrieving revision 1.2
diff -u -p -r1.2 if-4.c
--- if-4.c	2000/07/08 02:33:00	1.2
+++ if-4.c	2000/10/25 17:53:24
@@ -2,7 +2,7 @@
    NUL terminated, so we would print garbage after it.  */
 /* { dg-do compile } */
 
-#if 1 += 2   /* { dg-error "'\\+=' is not valid" "+= in if" } */
+#if 1 += 2   /* { dg-error "is not valid" "+= in if" } */
 syntax_error
 #endif
 int foo;
Index: testsuite/gcc.dg/cpp/if-5.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/if-5.c,v
retrieving revision 1.1
diff -u -p -r1.1 if-5.c
--- if-5.c	2000/06/27 22:26:11	1.1
+++ if-5.c	2000/10/25 17:53:24
@@ -2,11 +2,8 @@
    Jakub Jelinek <jakub@redhat.com>.  */
 /* { dg-do preprocess } */
 
-#ifdef 0  /* { dg-error "with invalid argument" } */
-#error not seen
+#ifdef 0  /* { dg-error "macro names" } */
 #endif
 
-#ifndef 0  /* { dg-error "with invalid argument" } */
-#else
-#error not seen
+#ifndef 0  /* { dg-error "macro names" } */
 #endif
Index: testsuite/gcc.dg/cpp/if-mop.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/if-mop.c,v
retrieving revision 1.1
diff -u -p -r1.1 if-mop.c
--- if-mop.c	2000/06/27 22:26:11	1.1
+++ if-mop.c	2000/10/25 17:53:24
@@ -2,6 +2,8 @@
 
 /* { dg-do preprocess } */
 
+/* Source: Neil Booth.  */
+
 /* Various illegal expressions with missing components.  */
 
 #if		/* { dg-error "no expression" "empty #if" } */
Index: testsuite/gcc.dg/cpp/macro3.c
===================================================================
RCS file: macro3.c
diff -N macro3.c
--- /dev/null	Tue May  5 13:32:27 1998
+++ macro3.c	Wed Oct 25 10:53:24 2000
@@ -0,0 +1,47 @@
+/* { dg-do run } */
+/* { dg-options "-std=c99" } */
+
+/* First two tests sourced from a bug report of Thomas Pornin.
+   Varargs test source Jamie Lokier.
+   All adapted for the testsuite by Neil Booth, Oct 2000.  */
+
+int c(int x)
+{
+  return x;
+}
+
+int a(int x)
+{
+  return x;
+}
+
+/* Tests various macro abuse is correctly expanded.  */
+#define c(x) d
+#define d(x) c(2)
+
+/* Every GCC <= 2.96 appears to fail this.  */
+#define a(x) b(
+#define b(x) a(
+
+#define apply(...)   apply2 (__VA_ARGS__)  
+#define half(x)      ((x) / 2)
+#define apply2(f,x)  f (x)
+
+extern void abort (void);
+extern void exit (int);
+
+int main()
+{
+  /* Expands to c(2).  */
+  if (c(c)(c) != 2)
+    abort ();
+
+  /* Expands to a(2).  */
+  if (a(a)x)2) != 2)
+    abort ();
+
+  if (apply (half, 200) != 100)
+    abort ();
+
+  exit (0);
+}
Index: testsuite/gcc.dg/cpp/macsyntx.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/macsyntx.c,v
retrieving revision 1.5
diff -u -p -r1.5 macsyntx.c
--- macsyntx.c	2000/08/02 07:08:49	1.5
+++ macsyntx.c	2000/10/25 17:53:24
@@ -28,13 +28,14 @@
 #define foo(, X)		/* { dg-error "parameter name" } */
 #define foo(X, X)		/* { dg-error "duplicate" } */
 #define foo(X Y)		/* { dg-error "comma" } */
-#define foo(()			/* { dg-error "token may not appear" } */
+#define foo(()			/* { dg-error "may not appear" } */
 #define foo(..., X)		/* { dg-error "missing" } */
 #define foo \
 __VA_ARGS__			/* { dg-warning "__VA_ARGS__" } */
-#define foo(__VA_ARGS__)	/* { dg-warning "__VA_ARGS__" } */
-#define foo(...) __VA_ARGS__	/* OK.  */
+#define goo(__VA_ARGS__)	/* { dg-warning "__VA_ARGS__" } */
+#define hoo(...) __VA_ARGS__	/* OK.  */
 #define __VA_ARGS__		/* { dg-warning "__VA_ARGS__" } */
+__VA_ARGS__			/* { dg-warning "__VA_ARGS__" } */
 
 /* test # of supplied arguments.  */
 #define none()
@@ -43,12 +44,12 @@ __VA_ARGS__			/* { dg-warning "__VA_ARGS
 #define var0(...)
 #define var1(x, ...)
 none()				/* OK.  */
-none(ichi)			/* { dg-error "too many" } */
+none(ichi)			/* { dg-error "passed 1" } */
 one()				/* OK.  */
 one(ichi)			/* OK.  */
 one(ichi\
-, ni)				/* { dg-error "too many" } */
-two(ichi)			/* { dg-error "not enough" } */
+, ni)				/* { dg-error "passed 2" } */
+two(ichi)			/* { dg-error "requires 2" } */
 var0()				/* OK.  */
 var0(ichi)			/* OK.  */
 var1()				/* { dg-warning "rest arguments to be used" } */
Index: testsuite/gcc.dg/cpp/paste2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/paste2.c,v
retrieving revision 1.2
diff -u -p -r1.2 paste2.c
--- paste2.c	2000/08/19 05:25:00	1.2
+++ paste2.c	2000/10/25 17:53:25
@@ -56,8 +56,8 @@ int main ()
     err ("Operator >> pasting");
 
   /* The LHS should not attempt to expand twice, and thus becomes a
-     call to the function glue, but the RHS should fully expand.  */
-  if (glue (gl, ue) (12) != glue (xgl, ue) (1, 2))
+     call to the function glue.  */
+  if (glue (gl, ue) (12) != 12)
     err ("Recursive macros");
 
   /* Test placemarker pasting.  The glued lines should all appear
@@ -106,6 +106,8 @@ int main ()
       err ("Various operator pasting");
     if (strcmp (hh, "%:%:"))
       err ("Pasted digraph spelling");
+    /* glue3 here will only work if we paste left-to-right.  If a
+       future implementation does not do this, change the test.  */
     if ((glue (., 0) glue (=, =) .0) + (glue3 (1.0e, +, 1) == 10.0) != 2)
       err ("Pasted numbers");
   }
Index: testsuite/gcc.dg/cpp/paste6.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/paste6.c,v
retrieving revision 1.1
diff -u -p -r1.1 paste6.c
--- paste6.c	2000/07/20 17:57:38	1.1
+++ paste6.c	2000/10/25 17:53:25
@@ -7,6 +7,6 @@
 extern int foo(int x);
 
 #define bar(x) foo(x)
-#define baz(x) bar(##x)  /* { dg-warning "nothing can be pasted" } */
+#define baz(x) bar(##x)
 
-int quux(int y) { return baz(y); }
+int quux(int y) { return baz(y); }  /* { dg-warning "valid preprocessing" } */
Index: testsuite/gcc.dg/cpp/paste8.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/paste8.c,v
retrieving revision 1.1
diff -u -p -r1.1 paste8.c
--- paste8.c	2000/09/04 07:51:58	1.1
+++ paste8.c	2000/10/25 17:53:25
@@ -7,9 +7,9 @@ int foo(int, ...);
 a(1)
 a(1, 2, 3)
 #define b(x, y, z...) foo(x, ##y)
-b(1, 2, 3)				/* { dg-warning "pasting would not" } */
+b(1, 2, 3)			/* { dg-warning "valid preprocessing token" } */
 #define c(x, y, z...) foo(x, ##z)
 c(1, 2)
 c(1, 2, 3)
-#define d(x) foo(##x)			/* { dg-warning "nothing can be pasted" } */
-d(1)
+#define d(x) fo(##x)
+d(1)				/* { dg-warning "valid preprocessing token" } */
Index: testsuite/gcc.dg/cpp/redef2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/redef2.c,v
retrieving revision 1.1
diff -u -p -r1.1 redef2.c
--- redef2.c	2000/06/27 22:26:11	1.1
+++ redef2.c	2000/10/25 17:53:25
@@ -26,5 +26,5 @@
    { dg-warning "previous"  "prev def ro"   { target *-*-* } 11 }
    { dg-warning "previous"  "prev def va"   { target *-*-* } 14 }
 
-   { dg-warning "varargs"   "named varargs" { target *-*-* } 14 }
-   { dg-warning "varargs"   "anon varargs"  { target *-*-* } 15 } */ 
+   { dg-warning "named variable"   "named"  { target *-*-* } 14 }
+   { dg-warning "anonymous variable" "anon" { target *-*-* } 15 } */ 
Index: testsuite/gcc.dg/cpp/strify2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/strify2.c,v
retrieving revision 1.2
diff -u -p -r1.2 strify2.c
--- strify2.c	2000/07/04 11:51:43	1.2
+++ strify2.c	2000/10/25 17:53:25
@@ -14,6 +14,10 @@ extern void abort (void);
 #define xstr(x) str(x)
 #define strvar(...) #__VA_ARGS__
 
+#define glibc_str(x) glibc_str2 (w, x)
+#define glibc_str2(w, x) #x
+#define ver GLIBC_2.2
+
 int main (int argc, char *argv[])
 {
   str (\);		/* { dg-warning "valid string" "str(\\)" } */
@@ -44,6 +48,9 @@ int main (int argc, char *argv[])
 
   if (strcmp (strvar (foo, bar), "foo, bar"))
     err ("variable arguments");
+
+  if (strcmp (glibc_str (ver), "GLIBC_2.2"))
+    err ("whitespace");
 
   return 0;
 }
Index: testsuite/gcc.dg/cpp/strp1.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/strp1.c,v
retrieving revision 1.1
diff -u -p -r1.1 strp1.c
--- strp1.c	2000/06/27 22:26:11	1.1
+++ strp1.c	2000/10/25 17:53:25
@@ -16,7 +16,7 @@ static const char t1[] = "1.1";
 #define f h
 #define h(a) a+f
 static const char s2[] = S( f(1)(2) );
-static const char t2[] = "1+h(2)";
+static const char t2[] = "1+f(2)";
 
 #undef I
 #undef f
Index: testsuite/gcc.dg/cpp/tr-warn1.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/tr-warn1.c,v
retrieving revision 1.1
diff -u -p -r1.1 tr-warn1.c
--- tr-warn1.c	2000/06/27 22:26:11	1.1
+++ tr-warn1.c	2000/10/25 17:53:25
@@ -24,7 +24,7 @@
  #assert baz(quux)	/* { dg-bogus "indented" "^ #ext"     } */
  # assert quux(weeble)	/* { dg-bogus "indented" "^ # ext"    } */
 
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 22 } */
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 23 } */
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 24 } */
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 25 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 22 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 23 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 24 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 25 } */
Index: testsuite/gcc.dg/cpp/tr-warn3.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/tr-warn3.c,v
retrieving revision 1.1
diff -u -p -r1.1 tr-warn3.c
--- tr-warn3.c	2000/07/25 20:43:05	1.1
+++ tr-warn3.c	2000/10/25 17:53:25
@@ -55,7 +55,7 @@
 
 #endif
 
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 27 } */
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 28 } */
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 29 } */
-/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 30 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 27 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 28 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 29 } */
+/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 30 } */
Index: testsuite/gcc.dg/cpp/tr-warn6.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/tr-warn6.c,v
retrieving revision 1.1
diff -u -p -r1.1 tr-warn6.c
--- tr-warn6.c	2000/09/10 03:41:50	1.1
+++ tr-warn6.c	2000/10/25 17:53:25
@@ -4,16 +4,16 @@
 /* { dg-do preprocess } */
 /* { dg-options "-Wtraditional -fno-show-column" } */
 
-#define foo1(h) sdf "h3" fds "h" /* { dg-warning "macro arg \"h\" would be stringified" "traditional stringification" } */
-#define foo2(h2) sdf "h2" fds "h3" /* { dg-warning "macro arg \"h2\" would be stringified" "traditional stringification" } */
-#define foo3(h3) sdf "h2" fds "h3" /* { dg-warning "macro arg \"h3\" would be stringified" "traditional stringification" } */
-#define foo4(h) sdf 'h3' fds 'h' /* { dg-warning "macro arg \"h\" would be stringified" "traditional stringification" } */
-#define foo5(h2) sdf 'h2' fds 'h3' /* { dg-warning "macro arg \"h2\" would be stringified" "traditional stringification" } */
-#define foo6(h3) sdf 'h2' fds 'h3' /* { dg-warning "macro arg \"h3\" would be stringified" "traditional stringification" } */
-#define foo7(AA, hello, world, EEE) sdf "A B hello C,world,DhelloE F" fds EEE /* { dg-warning "macro arg \"hello\" would be stringified" "traditional stringification" } */
+#define foo1(h) sdf "h3" fds "h" /* { dg-warning "macro argument \"h\" would be stringified" "traditional stringification" } */
+#define foo2(h2) sdf "h2" fds "h3" /* { dg-warning "macro argument \"h2\" would be stringified" "traditional stringification" } */
+#define foo3(h3) sdf "h2" fds "h3" /* { dg-warning "macro argument \"h3\" would be stringified" "traditional stringification" } */
+#define foo4(h) sdf 'h3' fds 'h' /* { dg-warning "macro argument \"h\" would be stringified" "traditional stringification" } */
+#define foo5(h2) sdf 'h2' fds 'h3' /* { dg-warning "macro argument \"h2\" would be stringified" "traditional stringification" } */
+#define foo6(h3) sdf 'h2' fds 'h3' /* { dg-warning "macro argument \"h3\" would be stringified" "traditional stringification" } */
+#define foo7(AA, hello, world, EEE) sdf "A B hello C,world,DhelloE F" fds EEE /* { dg-warning "macro argument \"hello\" would be stringified" "traditional stringification" } */
 
 /* Catch the second warning from the above line.  */
-/* { dg-warning "macro arg \"world\" would be stringified" "traditional stringification" { target *-*-* } 13 } */
+/* { dg-warning "macro argument \"world\" would be stringified" "traditional stringification" { target *-*-* } 13 } */
 
 #line 19 "sys-header.h" 3
 /* We are in system headers now, no -Wtraditional warnings should issue.  */
Index: testsuite/gcc.dg/cpp/undef1.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/undef1.c,v
retrieving revision 1.3
diff -u -p -r1.3 undef1.c
--- undef1.c	2000/07/19 20:18:08	1.3
+++ undef1.c	2000/10/25 17:53:25
@@ -9,6 +9,6 @@
 
 #define foo(bar) bar
 
-foo( blah			/* { dg-error "unterminated argument" }  */
+foo( blah	/* { dg-error "unterminated" "" { target *-*-* } 13 } */
 #undef foo	/* { dg-error "may not be used inside" "foo(#undef foo)" } */
      blah )
Index: testsuite/gcc.dg/cpp/undef2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/undef2.c,v
retrieving revision 1.1
diff -u -p -r1.1 undef2.c
--- undef2.c	2000/06/27 22:26:11	1.1
+++ undef2.c	2000/10/25 17:53:25
@@ -1,7 +1,9 @@
-/* C99 6.10.8 para 4: None of [the predefined macro names] shall be the
-   subject of a #define or an #undef preprocessing directive.  */
+/* C99 6.10.8 para 4: None of [the predefined macro names] shall be
+   the subject of a #define or an #undef preprocessing directive.  We
+   pass -fno-show-column as otherwise dejagnu gets confused.  */
 
 /* { dg-do preprocess } */
+/* { dg-options "-fno-show-column" } */
 
 #undef __DATE__		/* { dg-warning "undefining" "__DATE__" } */
 #undef __TIME__		/* { dg-warning "undefining" "__TIME__" } */
Index: testsuite/gcc.dg/cpp/widestr1.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/gcc.dg/cpp/widestr1.c,v
retrieving revision 1.1
diff -u -p -r1.1 widestr1.c
--- widestr1.c	2000/06/27 22:26:11	1.1
+++ widestr1.c	2000/10/25 17:53:25
@@ -4,6 +4,6 @@
 
 /* { dg-do preprocess } */
 
-#line 1 L"foo" /* { dg-error "not a string" "wide string in #line" } */
+#line 1 L"foo" /* { dg-error "not a valid filename" "wide string in #line" } */
 #include L"stdio.h" /* { dg-error "expects" "wide string in #include" } */
 #pragma implementation L"test.h" /* { dg-error "malformed" "wide string in #pragma implementation" } */


More information about the Gcc-patches mailing list