GCC 12 has new warning, -Winfinite-recursion, that is being triggered by six
tests in the directory tests/valid when compiled in high-level C grades. Since
we also enable -Werror, this is causing these test to fail. Fix these failures
by either removing the infinite recursion from them or by disabling the new GCC
warning for the affected test cases.
configure.ac:
tests/DEFNS_FOR_TESTS.in:
Define a variable whose value is the option for disabling GCC's infinite
recursion check.
tests/valid/higher_order5.m:
tests/valid/stack_alloc.m:
Modify these tests so they do not trigger the infinite recursion warning
in GCC (or Mercury for that matter).
tests/valid/mode_syntax.m:
tests/valid/same_length_2.m:
Merge these two tests (under the first name) since they both test the same
thing. Delete the same_length_2 version.
tests/valid/Mmakefile:
Conform to the above deletion.
tests/valid/Mercury.options:
Include DEFNS_FOR_TESTS here so that mmc --make can see it.
Disable GCC's infinite recursion check for those tests that trigger
it.
Shut up a bunch Mercury warnings for the mode_syntax test case that
are unrelated to what is actually being tested.
tests/invalid/*.{m,err_exp}:
tests/misc_tests/*.m:
tests/mmc_make/*.m:
tests/par_conj/*.m:
tests/purity/*.m:
tests/stm/*.m:
tests/string_format/*.m:
tests/structure_reuse/*.m:
tests/submodules/*.m:
tests/tabling/*.m:
tests/term/*.m:
tests/trailing/*.m:
tests/typeclasses/*.m:
tests/valid/*.m:
tests/warnings/*.{m,exp}:
Make these tests use four-space indentation, and ensure that
each module is imported on its own line. (I intend to use the latter
to figure out which subdirectories' tests can be executed in parallel.)
These changes usually move code to different lines. For the tests
that check compiler error messages, expect the new line numbers.
browser/cterm.m:
browser/tree234_cc.m:
Import only one module per line.
tests/hard_coded/boyer.m:
Fix something I missed.
Estimated hours taken: 0.1
Branches: main
Remove deprecated syntax from some test cases.
(This was done on the release branch some time ago.)
tests/*/*.m:
Replace deprecated syntax.
Estimated hours taken: 2
Make the syntax for defining modes and insts similar to type equivalence.
Old syntax:
:- inst foo = someinstdefn.
:- mode foo :: someinst -> someotherinst.
New syntax:
:- inst foo == someinstdefn.
:- mode foo == someinst >> someotherinst.
The old syntax is still supported. For `::' and `->' it may eventually
be phased out (but it doesn't cause many problems apart from possible
confusion of users, so it's a low priority).
In the case of `:- inst' we could already use `==' or `=', however we
now make `==' the standard syntax. Again, we support both and probably
will for quite some time.
NEWS:
Mention these changes.
compiler/prog_io.m:
Make `==' the standard operator for `:- inst <InstDefn>.'
declarations.
Make `==' and `>>' the standard operators for
`:- mode foo == someinst >> someotherinst'.
`::' and `->' are still supported.
compiler/prog_io_util.m:
Make `>>' the standard operator for inline mode declarations.
`->' is still supported.
doc/reference_manual.texi:
Update the syntax in the reference manual.
Mention that `::' and `->' is deprecated.
tests/valid/Mmakefile:
tests/valid/mode_syntax.m:
Add a new test of the new syntax.
compiler/fact_table.m:
Fix a typo (missing quote) in the verbose messages for fact tables.