diff options
Diffstat (limited to 'gnulib')
-rw-r--r-- | gnulib/Makefile | 5 | ||||
-rw-r--r-- | gnulib/tst-gcc.c | 74 |
2 files changed, 78 insertions, 1 deletions
diff --git a/gnulib/Makefile b/gnulib/Makefile index a7255b3..3586feb 100644 --- a/gnulib/Makefile +++ b/gnulib/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1997 Free Software Foundation, Inc. +# Copyright (C) 1991, 1997, 2000 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -18,6 +18,9 @@ subdir := gnulib +# Maybe this is the right place for a test of gcc's interface. +tests = tst-gcc + # Which routines are required is machine-dependent. include ../Rules diff --git a/gnulib/tst-gcc.c b/gnulib/tst-gcc.c new file mode 100644 index 0000000..2d930ae --- /dev/null +++ b/gnulib/tst-gcc.c @@ -0,0 +1,74 @@ +/* Test program for the gcc interface. + Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <stdio.h> + +#define __no_type_class -1 +#define __void_type_class 0 +#define __integer_type_class 1 +#define __char_type_class 2 +#define __enumeral_type_class 3 +#define __boolean_type_class 4 +#define __pointer_type_class 5 +#define __reference_type_class 6 +#define __offset_type_class 7 +#define __real_type_class 8 +#define __complex_type_class 9 +#define __function_type_class 10 +#define __method_type_class 11 +#define __record_type_class 12 +#define __union_type_class 13 +#define __array_type_class 14 +#define __string_type_class 15 +#define __set_type_class 16 +#define __file_type_class 17 +#define __lang_type_class 18 + + +#define TEST(var) \ + ({ int wrong = (__builtin_classify_type (__##var##_type) \ + != __##var##_type_class); \ + printf ("%-15s is %d: %s\n", \ + #var, __builtin_classify_type (__##var##_type), \ + wrong ? "WRONG" : "OK"); \ + wrong; \ + }) + + +int +main (void) +{ + int result = 0; + int __integer_type; + void *__pointer_type; + double __real_type; + __complex__ double __complex_type; + struct { int a; } __record_type; + union { int a; int b; } __union_type; + + result |= TEST (integer); + result |= TEST (pointer); + result |= TEST (real); + result |= TEST (complex); + result |= TEST (record); + result |= TEST (union); + + return result; +} |