mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-18 02:43:40 +00:00
compiler/det_report.m:
In some cases described in the new test case, the error message
we print for a missing switch inside an arm of a larger switch
is misleading unless we print *which* arm of the larger switch
we are complaining about, so print that information.
tests/invalid/require_complete_nested_switch.{m,err_exp}:
A test case derived from the real-life error that motivated this diff.
tests/invalid/Mmakefile:
Enable the new test case.
628 lines
16 KiB
Makefile
628 lines
16 KiB
Makefile
#-----------------------------------------------------------------------------#
|
|
# vim: ts=8 sw=8 noexpandtab ft=make
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
TESTS_DIR = ..
|
|
THIS_DIR = invalid
|
|
MAYBE_J1 =
|
|
|
|
# Note: multi-module tests are listed separately from single-module tests
|
|
# because we need to make dependencies only for multi-module tests.
|
|
#
|
|
# Tests in which a single source file contains more than one nested module
|
|
# should be put into the invalid_submodules directory, not this one.
|
|
# In that directory, we disable parallel make to avoid intermittent failures
|
|
# caused by interface files of nested submodules not being ready
|
|
# when another job, executed in parallel by mmake, wants to read them.
|
|
#
|
|
# Tests for which we want to test for errors during the making of dependencies
|
|
# should be put into the invalid_onlydepend directory.
|
|
#
|
|
# Tests which get errors during the making of dependencies but for which
|
|
# we want to test errors during compilation should be put into the
|
|
# invalid_nodepend directory.
|
|
#
|
|
# Tests for which we want to test for errors during the making of .int/.int2
|
|
# files should be put into the invalid_make_int directory.
|
|
|
|
ALWAYS_SPECIAL_RULE_MULTIMODULE_PROGS = \
|
|
duplicate_instance_2
|
|
|
|
ALWAYS_SPECIAL_RULE_SINGLEMODULE_PROGS = \
|
|
foreign_include_file_missing \
|
|
illtyped_compare \
|
|
make_opt_error \
|
|
require_tailrec_1 \
|
|
require_tailrec_2 \
|
|
require_tailrec_3
|
|
|
|
INTERMOD_SPECIAL_MULTIMODULE_PROGS = \
|
|
abstract_eqv \
|
|
type_error_use_module
|
|
|
|
INTERMOD_SPECIAL_SINGLEMODULE_PROGS = \
|
|
bug214 \
|
|
test_feature_set \
|
|
|
|
BORING_MULTIMODULE_PROGS = \
|
|
exported_unify \
|
|
ho_default_func_2.sub \
|
|
ii_parent.ii_child \
|
|
imported_mode \
|
|
partial_implied_mode \
|
|
transitive_import_class
|
|
|
|
BORING_SINGLEMODULE_PROGS = \
|
|
abstract_solver_type \
|
|
actual_expected \
|
|
actual_more_expected \
|
|
ambiguous_method \
|
|
ambiguous_method_2 \
|
|
ambiguous_overloading_error \
|
|
any_mode \
|
|
any_passed_as_ground \
|
|
any_should_not_match_bound \
|
|
any_to_ground_in_ite_cond \
|
|
any_to_ground_in_ite_cond_nomax \
|
|
anys_in_negated_contexts \
|
|
arg_permutation \
|
|
arith_wrong_module \
|
|
assert_in_interface \
|
|
bad_consider_used \
|
|
bad_detism \
|
|
bad_fact_table_data \
|
|
bad_fact_table_decls \
|
|
bad_format_call \
|
|
bad_inst_for_type \
|
|
bad_instance \
|
|
bad_instance2 \
|
|
bad_item_in_interface \
|
|
bad_pred_arity \
|
|
bad_statevar_bad_context \
|
|
bad_sv_unify_msg \
|
|
bad_type_for_inst \
|
|
bind_in_negated \
|
|
bind_var_errors \
|
|
bug10 \
|
|
bug113 \
|
|
bug117 \
|
|
bug150 \
|
|
bug17 \
|
|
bug184 \
|
|
bug191 \
|
|
bug197 \
|
|
bug238 \
|
|
bug257 \
|
|
bug278 \
|
|
bug415 \
|
|
bug436 \
|
|
bug476 \
|
|
bug487 \
|
|
bug496 \
|
|
bug83 \
|
|
builtin_int \
|
|
builtin_proc \
|
|
char_inst \
|
|
circ_inst \
|
|
circ_inst2 \
|
|
circ_inst3 \
|
|
circ_inst4 \
|
|
circ_inst5 \
|
|
circ_mode \
|
|
circ_mode2 \
|
|
circ_mode3 \
|
|
circ_mode4 \
|
|
circ_type \
|
|
circ_type2 \
|
|
circ_type3 \
|
|
circ_type5 \
|
|
coerce_ambig \
|
|
coerce_clobbered \
|
|
coerce_disambig \
|
|
coerce_implied_mode \
|
|
coerce_infer \
|
|
coerce_instvar \
|
|
coerce_int \
|
|
coerce_mode_error \
|
|
coerce_mode_error2 \
|
|
coerce_non_du \
|
|
coerce_recursive_inst \
|
|
coerce_recursive_type \
|
|
coerce_syntax \
|
|
coerce_type_error \
|
|
coerce_unify_tvars \
|
|
coerce_uniq \
|
|
coerce_void \
|
|
comparison \
|
|
complex_constraint_err \
|
|
conflicting_tabling_pragmas \
|
|
constrained_poly_insts2 \
|
|
constraint_proof_bug_lib \
|
|
constructor_warning \
|
|
currying_multimode_func \
|
|
cyclic_typeclass \
|
|
cyclic_typeclass_2 \
|
|
cyclic_typeclass_3 \
|
|
default_ho_inst \
|
|
default_ho_inst_2 \
|
|
det_atomic_goal_msgs \
|
|
det_errors \
|
|
det_errors_cc \
|
|
ee_invalid \
|
|
erroneous_throw_promise \
|
|
error_in_list \
|
|
exist_foreign_error \
|
|
exported_foreign_enum \
|
|
exported_mode \
|
|
ext_type \
|
|
ext_type_bug \
|
|
external2 \
|
|
extra_info_prompt \
|
|
fbnf \
|
|
field_syntax_error \
|
|
foreign_enum_invalid \
|
|
foreign_procs_exist_type \
|
|
foreign_purity_mismatch \
|
|
foreign_solver_type \
|
|
foreign_type_2 \
|
|
foreign_type_visibility \
|
|
fp_dup_bug \
|
|
freefree \
|
|
functor_ho_inst_bad \
|
|
functor_ho_inst_bad_2 \
|
|
functor_ho_inst_bad_3 \
|
|
fundeps_coverage \
|
|
getopt_io_old \
|
|
getopt_old \
|
|
getopt_old_se \
|
|
gh72_errors \
|
|
hawkins_mm_fail_reset \
|
|
higher_order_mode_mismatch \
|
|
higher_order_no_detism \
|
|
ho_any_inst \
|
|
ho_default_func_1 \
|
|
ho_default_func_3 \
|
|
ho_default_func_4 \
|
|
ho_type_arity_bug \
|
|
ho_type_mode_bug \
|
|
ho_unique_error \
|
|
html \
|
|
impure_method_impl \
|
|
incompatible_instance_constraints \
|
|
inconsistent_instances \
|
|
inline_conflict \
|
|
inline_conflict_warn \
|
|
inst_for_eqv_type \
|
|
inst_matches_final_bug \
|
|
instance_no_type \
|
|
instance_var_bug \
|
|
integral_constant_no_suffix \
|
|
invalid_event \
|
|
invalid_export_detism \
|
|
invalid_instance_declarations \
|
|
invalid_int \
|
|
invalid_integral_call_inst \
|
|
invalid_mllibs \
|
|
invalid_new \
|
|
io_in_ite_cond \
|
|
lambda_syntax_error \
|
|
loopcheck \
|
|
magicbox \
|
|
malformed_ite \
|
|
max_error_line_width \
|
|
merge_ground_any \
|
|
merge_inst_error \
|
|
method_impl \
|
|
missing_concrete_instance \
|
|
missing_det_decls \
|
|
mixed_up_streams \
|
|
mode_decl_in_wrong_section \
|
|
mode_error_arg_number \
|
|
mode_inf \
|
|
modes_erroneous \
|
|
mostly_uniq1 \
|
|
mostly_uniq2 \
|
|
mpj1 \
|
|
mpj3 \
|
|
mpj4 \
|
|
multimode_addr_problems \
|
|
multimode_dcg \
|
|
multimode_missing_impure \
|
|
multimode_syntax \
|
|
multiply_star \
|
|
multisoln_func \
|
|
no_method \
|
|
not_a_switch \
|
|
not_in_interface \
|
|
nullary_ho_func_error \
|
|
oisu_check_add_pragma_errors \
|
|
oisu_check_semantic_errors \
|
|
one_member \
|
|
overloading \
|
|
polymorphic_unification \
|
|
pragma_c_code_dup_var \
|
|
pragma_c_code_no_det \
|
|
pragma_export \
|
|
promise_equivalent_clauses \
|
|
promise_equivalent_solutions_test \
|
|
promise_equivalent_solutions_test_2 \
|
|
qual_basic_test2 \
|
|
qualified_cons_id2 \
|
|
quant_constraint_1 \
|
|
quant_constraint_2 \
|
|
range_restrict \
|
|
record_syntax_errors \
|
|
ref_to_implicit_comma \
|
|
ref_to_implicit_pred \
|
|
repeated_field_name \
|
|
repeated_instance_vars_unsat \
|
|
require_complete_nested_switch \
|
|
require_det_in_lambda \
|
|
require_scopes \
|
|
require_switch_arms_detism \
|
|
spurious_mode_error \
|
|
state_vars_test1 \
|
|
state_vars_test2 \
|
|
state_vars_test3 \
|
|
state_vars_test4 \
|
|
state_vars_test5 \
|
|
string_format_bad \
|
|
string_format_unknown \
|
|
subtype_abstract \
|
|
subtype_circular \
|
|
subtype_ctor_arg \
|
|
subtype_eqv \
|
|
subtype_exist_constraints \
|
|
subtype_exist_vars \
|
|
subtype_foreign \
|
|
subtype_foreign_supertype \
|
|
subtype_foreign_supertype2 \
|
|
subtype_ho \
|
|
subtype_not_subset \
|
|
subtype_user_compare \
|
|
switch_arm_multi_not_det \
|
|
tc_err1 \
|
|
tc_err2 \
|
|
test_may_duplicate \
|
|
test_may_export_body \
|
|
tricky_assert1 \
|
|
try_bad_params \
|
|
try_detism \
|
|
try_io_else \
|
|
type_arity \
|
|
type_diff \
|
|
type_error_ambiguous \
|
|
type_error_in_arg \
|
|
type_inf_loop \
|
|
type_loop \
|
|
type_mismatch \
|
|
type_with_no_defn \
|
|
typeclass_bad_method_mode \
|
|
typeclass_bogus_method \
|
|
typeclass_constraint_extra_var \
|
|
typeclass_dup_method_mode \
|
|
typeclass_missing_det \
|
|
typeclass_missing_det_2 \
|
|
typeclass_missing_det_3 \
|
|
typeclass_missing_mode \
|
|
typeclass_missing_mode_2 \
|
|
typeclass_mode \
|
|
typeclass_mode_2 \
|
|
typeclass_mode_3 \
|
|
typeclass_mode_4 \
|
|
typeclass_test_10 \
|
|
typeclass_test_12 \
|
|
typeclass_test_13 \
|
|
typeclass_test_3 \
|
|
typeclass_test_4 \
|
|
typeclass_test_5 \
|
|
typeclass_test_7 \
|
|
typeclass_test_8 \
|
|
typeclass_test_9 \
|
|
types2 \
|
|
undeclared_mode \
|
|
undef_impl_def_literal \
|
|
undef_inst \
|
|
undef_lambda_mode \
|
|
undef_mode \
|
|
undef_mode_and_no_clauses \
|
|
undef_symbol \
|
|
undef_type \
|
|
undef_type_mod_qual \
|
|
unify_mode_error \
|
|
uniq_modes \
|
|
uniq_mutable \
|
|
uniq_neg \
|
|
unsatisfiable_constraint \
|
|
unsatisfiable_constraint_bug \
|
|
unsatisfiable_constraint_msg \
|
|
unsatisfiable_super \
|
|
user_eq_dummy \
|
|
user_field_access_decl_conflict \
|
|
user_field_access_decl_override \
|
|
user_field_access_decl_override2 \
|
|
wrong_arity_function \
|
|
wrong_type_arity
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# The following require that num_tag_bits >= 1.
|
|
# NOTE We don't support reserving tags anymore.
|
|
# RESERVE_TAG_MODULES = \
|
|
# reserve_tag
|
|
#
|
|
# The java and csharp grades compile with num_tag_bits = 0.
|
|
# NOTE We don't support reserving tags anymore.
|
|
# ifneq "$(filter java% csharp%,$(GRADE))" ""
|
|
# RESERVE_TAG_PROGS =
|
|
# else
|
|
# RESERVE_TAG_PROGS = $(RESERVE_TAG_MODULES)
|
|
# endif
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# The following require a trailing grade.
|
|
TRAILED_MODULES = \
|
|
trailed_mutable
|
|
|
|
ifeq "$(filter tr%,$(GRADE))" ""
|
|
TRAILED_PROGS =
|
|
else
|
|
TRAILED_PROGS = $(TRAILED_MODULES)
|
|
endif
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# The following require that the back-end support the C interface.
|
|
C_INTERFACE_MODULES = \
|
|
fe_unmapped_nonverbose \
|
|
fe_unmapped_verbose \
|
|
pragma_qual_error \
|
|
trace_goal_env
|
|
|
|
SPECIAL_RULE_C_INTERFACE_MODULES = \
|
|
foreign_decl_line_number
|
|
|
|
# These tests test things which only work for back-ends which support
|
|
# the C interface.
|
|
ifneq "$(filter java% csharp%,$(GRADE))" ""
|
|
C_INTERFACE_PROGS=
|
|
SPECIAL_RULE_C_INTERFACE_PROGS=
|
|
else
|
|
C_INTERFACE_PROGS=$(C_INTERFACE_MODULES)
|
|
SPECIAL_RULE_C_INTERFACE_PROGS=$(SPECIAL_RULE_C_INTERFACE_MODULES)
|
|
endif
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# The following require that the compiler not ignore `pragma type_spec'
|
|
# declarations.
|
|
TYPE_SPEC_MODULES = \
|
|
type_spec
|
|
|
|
TYPE_SPEC_PROGS = $(TYPE_SPEC_MODULES)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# XXX we do not yet pass the following tests:
|
|
# foreign_type_line_number (due to some errors being reported in .c
|
|
# files and .mh files rather than in .m files,
|
|
# or being reported in .m files but at the line number of
|
|
# the pragma foreign_proc rather than the pragma foreign_type)
|
|
# duplicate_instance_3 (the error is only detected when doing
|
|
# normal static linking; the error goes undetected
|
|
# when doing dynamic linking)
|
|
# parent.undeclared_child (just not yet implemented)
|
|
|
|
# XXX we do not currently pass the following tests:
|
|
# nonexistent_import (it is unclear whether the new output is OK or not)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# For the following modules, error messages may be produced while making a
|
|
# `.opt' file. Add specific rules to capture those errors into a `.err' file,
|
|
# and ignore the exit status.
|
|
ifeq "$(filter --intermod%,$(EXTRA_MCFLAGS))" ""
|
|
|
|
REDIRECT_OPT_ERROR_MODULES =
|
|
|
|
SPECIAL_RULE_MULTIMODULE_PROGS = \
|
|
$(ALWAYS_SPECIAL_RULE_MULTIMODULE_PROGS)
|
|
SPECIAL_RULE_SINGLEMODULE_PROGS = \
|
|
$(ALWAYS_SPECIAL_RULE_SINGLEMODULE_PROGS)
|
|
MULTIMODULE_PROGS = \
|
|
$(BORING_MULTIMODULE_PROGS) \
|
|
$(INTERMOD_SPECIAL_MULTIMODULE_PROGS)
|
|
SINGLEMODULE_PROGS = \
|
|
$(BORING_SINGLEMODULE_PROGS) \
|
|
$(INTERMOD_SPECIAL_SINGLEMODULE_PROGS)
|
|
|
|
else
|
|
|
|
REDIRECT_OPT_ERROR_MODULES = \
|
|
abstract_eqv \
|
|
bug214 \
|
|
test_feature_set \
|
|
type_error_use_module
|
|
|
|
SPECIAL_RULE_MULTIMODULE_PROGS = \
|
|
$(ALWAYS_SPECIAL_RULE_MULTIMODULE_PROGS) \
|
|
$(INTERMOD_SPECIAL_MULTIMODULE_PROGS)
|
|
SPECIAL_RULE_SINGLEMODULE_PROGS = \
|
|
$(ALWAYS_SPECIAL_RULE_SINGLEMODULE_PROGS) \
|
|
$(INTERMOD_SPECIAL_SINGLEMODULE_PROGS)
|
|
MULTIMODULE_PROGS = \
|
|
$(BORING_MULTIMODULE_PROGS)
|
|
SINGLEMODULE_PROGS = \
|
|
$(BORING_SINGLEMODULE_PROGS)
|
|
|
|
endif
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
NONSPECIAL_SINGLEMODULE_PROGS = \
|
|
$(SINGLEMODULE_PROGS) \
|
|
$(C_INTERFACE_PROGS) \
|
|
$(TRAILED_PROGS) \
|
|
$(TYPE_SPEC_PROGS)
|
|
|
|
SPECIAL_SINGLEMODULE_PROGS = \
|
|
$(SPECIAL_RULE_SINGLEMODULE_PROGS) \
|
|
$(SPECIAL_RULE_C_INTERFACE_PROGS)
|
|
|
|
NONSPECIAL_MULTIMODULE_PROGS = \
|
|
$(MULTIMODULE_PROGS)
|
|
|
|
SPECIAL_MULTIMODULE_PROGS = \
|
|
$(SPECIAL_RULE_MULTIMODULE_PROGS)
|
|
|
|
ALL_SINGLEMODULE_PROGS = \
|
|
$(NONSPECIAL_SINGLEMODULE_PROGS) \
|
|
$(SPECIAL_SINGLEMODULE_PROGS)
|
|
|
|
ALL_MULTIMODULE_PROGS = \
|
|
$(NONSPECIAL_MULTIMODULE_PROGS) \
|
|
$(SPECIAL_MULTIMODULE_PROGS)
|
|
|
|
PROGS = $(ALL_SINGLEMODULE_PROGS) $(ALL_MULTIMODULE_PROGS)
|
|
TESTS = $(sort $(ALL_MULTIMODULE_PROGS) $(ALL_SINGLEMODULE_PROGS:%=%-nodepend))
|
|
include ../Mmake.common
|
|
|
|
# Module-specific options should go in Mercury.options so they can be found
|
|
# by `mmc --make'.
|
|
include Mercury.options
|
|
|
|
%.runtest: %.err_res ;
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
ifeq ($(MMAKE_USE_MMC_MAKE),yes)
|
|
|
|
NONSPECIAL_PROGS = \
|
|
$(NONSPECIAL_SINGLEMODULE_PROGS) \
|
|
$(NONSPECIAL_MULTIMODULE_PROGS)
|
|
|
|
# XXX: with `mmake --use-mmc-make' the ".DEFAULT:" rule seems to take
|
|
# precedence over "%.err: %.m" rules.
|
|
# XXX: the reason we run the $(MCM) command twice is to avoid doubled up
|
|
# error messages, once while making interface files, then the module proper.
|
|
# The second time the command is run, only one set of error messages
|
|
# should appear.
|
|
$(NONSPECIAL_PROGS:%=%.err):
|
|
-$(MCM) $@
|
|
if $(MCM) -r $@ > /dev/null 2>&1 ; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
|
|
else
|
|
|
|
$(NONSPECIAL_SINGLEMODULE_PROGS:%=%.err): %.err: %.m
|
|
-$(MC) --make-interface $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
$*.m > $*.int_err 2>&1;
|
|
if $(MC) --errorcheck-only $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
$*.m > $*.err 2>&1; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
|
|
$(NONSPECIAL_MULTIMODULE_PROGS:%=%.err): %.err: %.m
|
|
if $(MC) --errorcheck-only $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
$*.m > $*.err 2>&1; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
|
|
endif
|
|
|
|
# For foreign_decl_line_number, the exact output is somewhat dependent on
|
|
# the C compiler, etc. So we just grep the output for "#error" to make sure
|
|
# that it contains the lines that we expect. That way we don't fail this test
|
|
# if there is some additional output (e.g. spurious warnings in system header
|
|
# files). We also pipe the output through `sort -u' to eliminate duplicates;
|
|
# this avoids spurious failures in cases where the C foreign_proc code
|
|
# is inlined by the Mercury compiler. We also pipe it through sed to remove
|
|
# "Mercury/cs/"; this avoids spurious failures with --use-subdirs.
|
|
foreign_decl_line_number.err: foreign_decl_line_number.m
|
|
rm -f foreign_decl_line_number.err
|
|
-$(MC) --make-interface $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
foreign_decl_line_number.m \
|
|
> foreign_decl_line_number.int_err 2>&1;
|
|
if $(MC) --errorcheck-only $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
--cflags "$(CFLAGS_FOR_ERRMSG_FILTER)" \
|
|
foreign_decl_line_number.m \
|
|
> foreign_decl_line_number.err.orig 2>&1; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
grep '#error' foreign_decl_line_number.err.orig | \
|
|
sed 's@Mercury/cs/@@g' | sort -u \
|
|
> foreign_decl_line_number.err
|
|
|
|
# Similarly for foreign_type_line_number, although in this case we use
|
|
# "long short int" rather than #error, so we need to grep for that instead.
|
|
foreign_type_line_number.err: foreign_type_line_number.m
|
|
rm -f foreign_type_line_number.err
|
|
if $(MC) --errorcheck-only $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
--cflags "$(CFLAGS_FOR_ERRMSG_FILTER)" \
|
|
foreign_type_line_number.m \
|
|
> foreign_type_line_number.err.orig 2>&1; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
grep 'long.*short' foreign_type_line_number.err.orig | \
|
|
sed 's@Mercury/cs/@@g' | sort -u \
|
|
> foreign_type_line_number.err
|
|
|
|
# For duplicate_instance_{1,2}, the error is only caught at link time.
|
|
# So we need to use a different rule for that.
|
|
# The exact error message varies a lot from system to system, so we don't check
|
|
# the error output, we just check the command return status.
|
|
duplicate_instance_2.err: duplicate_instance_1.m duplicate_instance_2.m
|
|
if $(MCM) duplicate_instance_2 > /dev/null 2>&1; \
|
|
then false; \
|
|
else echo "Error was successfully detected" > $*.err; \
|
|
fi
|
|
|
|
# This test case tests that we set the error status correctly
|
|
# when building the `.opt' files.
|
|
make_opt_error.err: make_opt_error.m
|
|
if $(MC) $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
--make-optimization-interface $* > $*.err 2>&1; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
|
|
# This test case tests that we don't abort when building the `.opt' files.
|
|
illtyped_compare.err: illtyped_compare.m
|
|
if $(MC) $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
--make-optimization-interface $* > $*.err 2>&1; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
|
|
# For these tests the error is only caught when generating target code.
|
|
.PHONY: missing_file
|
|
require_tailrec_1.err require_tailrec_2.err require_tailrec_3.err foreign_include_file_missing.err: %.err : %.m
|
|
-$(MC) --make-interface $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
$*.m > $*.int_err 2>&1;
|
|
if $(MC) --target-code-only $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) \
|
|
$*.m > $*.err 2>&1; \
|
|
then false; \
|
|
else true; \
|
|
fi
|
|
|
|
define OVERRIDE_OPT_RULE
|
|
$$(optdates_subdir)$(1).optdate $(1).err : $(1).m
|
|
$$(MCOI) $$(ALL_GRADEFLAGS) $$(ALL_MCOIFLAGS) $$(*F) $$(ERR_REDIRECT) || true
|
|
endef
|
|
|
|
$(foreach module,$(REDIRECT_OPT_ERROR_MODULES),$(eval $(call OVERRIDE_OPT_RULE,$(module))))
|
|
|
|
clean_local: clean_invalid
|
|
|
|
clean_invalid:
|
|
rm -f *.dep_err *.int_err *.err *.err_res *.err_res[2345]
|
|
|
|
#-----------------------------------------------------------------------------#
|