diff options
-rw-r--r-- | ChangeLog | 25 | ||||
-rw-r--r-- | math/Makefile | 32 | ||||
-rwxr-xr-x | math/gen-tgmath-tests.py | 34 |
3 files changed, 80 insertions, 11 deletions
@@ -1,5 +1,30 @@ 2018-05-18 Joseph Myers <joseph@codesourcery.com> + * math/gen-tgmath-tests.py: Import sys. + (Tests.__init__): Initialize macros_seen. + (Tests.add_tests): Add macro to macros_seen. Only generate tests + if requested to do so for this macro. + (Tests.add_all_tests): Take argument for macro for which to + generate tests. + (Tests.check_macro_list): New function. + (main): Handle check-list argument and argument specifying macro + for which to generate tests. + * math/Makefile [PYTHON] (tgmath3-macros): New variable. + [PYTHON] (tgmath3-macro-tests): Likewise. + [PYTHON] (tests): Add $(tgmath3-macro-tests) not test-tgmath3. + [PYTHON] (generated): Add $(addsuffix .c,$(tgmath3-macro-tests)) + not test-tgmath3.c. + [PYTHON] (CFLAGS-test-tgmath3.c): Remove. + [PYTHON] ($(tgmath3-macro-tests:%=$(objpfx)%.o): Add -fno-builtin + to CFLAGS. + [PYTHON] ($(objpfx)test-tgmath3.c): Replace rule by.... + [PYTHON] ($(foreach + m,$(tgmath3-macros),$(objpfx)test-tgmath3-$(m).c): ... this. New + rule. + [PYTHON] (tests-special): Add + $(objpfx)test-tgmath3-macro-list.out. + [PYTHON] ($(objpfx)test-tgmath3-macro-list.out): New rule. + * sysdeps/unix/sysv/linux/syscalls.list (nfsservctl): Make into a compat symbol, disabled for minimum symbol version GLIBC_2.28 and later. diff --git a/math/Makefile b/math/Makefile index 23574f5e09..ea141cbf99 100644 --- a/math/Makefile +++ b/math/Makefile @@ -350,12 +350,32 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \ endif ifdef PYTHON -tests += test-tgmath3 -generated += test-tgmath3.c -CFLAGS-test-tgmath3.c += -fno-builtin - -$(objpfx)test-tgmath3.c: gen-tgmath-tests.py - $(PYTHON) $< > $@ +tgmath3-macros = atan2 cbrt ceil copysign erf erfc exp2 expm1 fdim floor \ + fma fmax fmin fmod frexp hypot ilogb ldexp lgamma llrint \ + llround log10 log1p log2 logb lrint lround nearbyint \ + nextafter nexttoward remainder remquo rint round scalbn \ + scalbln tgamma trunc acos asin atan acosh asinh atanh cos \ + sin tan cosh sinh tanh exp log pow sqrt fabs carg cimag conj \ + cproj creal roundeven nextup nextdown fminmag fmaxmag llogb \ + fromfp fromfpx ufromfp ufromfpx totalorder totalordermag \ + scalb +tgmath3-macro-tests = $(addprefix test-tgmath3-,$(tgmath3-macros)) +tests += $(tgmath3-macro-tests) +generated += $(addsuffix .c,$(tgmath3-macro-tests)) + +$(tgmath3-macro-tests:%=$(objpfx)%.o): CFLAGS += -fno-builtin + +$(foreach m,$(tgmath3-macros),\ + $(objpfx)test-tgmath3-$(m).c): $(objpfx)test-tgmath3-%.c: \ + gen-tgmath-tests.py + $(PYTHON) gen-tgmath-tests.py $* > $@ + +# Verify that the list of supported macros is in sync between the +# Makefile and gen-tgmath-tests.py. +tests-special += $(objpfx)test-tgmath3-macro-list.out +$(objpfx)test-tgmath3-macro-list.out: gen-tgmath-tests.py + $(PYTHON) $< check-list $(tgmath3-macros) > $@; \ + $(evaluate-test) endif libm-test-fast-math-cflags = -fno-builtin -D__FAST_MATH__ -DTEST_FAST_MATH diff --git a/math/gen-tgmath-tests.py b/math/gen-tgmath-tests.py index aad72f4b4b..9bbf703a31 100755 --- a/math/gen-tgmath-tests.py +++ b/math/gen-tgmath-tests.py @@ -55,6 +55,7 @@ # uniquely determines the format. import string +import sys class Type(object): """A type that may be used as an argument for generic parameters.""" @@ -351,6 +352,7 @@ class Tests(object): self.add_type_var(t.name, t.condition) self.test_text_list = [] self.test_array_list = [] + self.macros_seen = set() def add_type_var(self, name, cond): """Add declarations of variables for a type.""" @@ -361,13 +363,18 @@ class Tests(object): self.types_seen.add(name) def add_tests(self, macro, ret, args, complex_func=None): - """Add tests for a given tgmath.h macro.""" + """Add tests for a given tgmath.h macro, if that is the macro for + which tests are to be generated; otherwise just add it to the + list of macros for which test generation is supported.""" # 'c' means the function argument or return type is # type-generic and complex only (a complex function argument # may still have a real macro argument). 'g' means it is # type-generic and may be real or complex; 'r' means it is # type-generic and may only be real; 's' means the same as # 'r', but restricted to float, double and long double. + self.macros_seen.add(macro) + if macro != self.macro: + return have_complex = False func = macro if ret == 'c' or 'c' in args: @@ -488,8 +495,10 @@ class Tests(object): test_func_text = if_cond_text(all_conds, test_func_text) self.test_text_list.append(test_func_text) - def add_all_tests(self): - """Add tests for all tgmath.h macros.""" + def add_all_tests(self, macro): + """Add tests for the given tgmath.h macro, if any, and generate the + list of all supported macros.""" + self.macro = macro # C99/C11 real-only functions. self.add_tests('atan2', 'r', ['r', 'r']) self.add_tests('cbrt', 'r', ['r']) @@ -614,12 +623,27 @@ class Tests(object): '#include <support/test-driver.c>'] return ''.join(self.header_list + test_list + footer_list) + def check_macro_list(self, macro_list): + """Check the list of macros that can be tested.""" + if self.macros_seen != set(macro_list): + print('error: macro list mismatch') + sys.exit(1) + def main(): """The main entry point.""" Type.init_types() t = Tests() - t.add_all_tests() - print(t.tests_text()) + if sys.argv[1] == 'check-list': + macro = None + macro_list = sys.argv[2:] + else: + macro = sys.argv[1] + macro_list = [] + t.add_all_tests(macro) + if macro: + print(t.tests_text()) + else: + t.check_macro_list(macro_list) if __name__ == '__main__': main() |