source: tests/Makefile.am

Last change on this file was d03a386, checked in by Michael Brooks <mlbrooks@…>, 2 months ago

Give a few string operator overloads a preference boost.

Intent is to approximate: When selecting +/* candidates, treat it ambiguous until finding a user-given arithmetic-vs-string constraint, such as assigning the result to a string. Once a string interpretation is imposed, prefer an alternative that converts to string as soon as possible.

This description is not directly achievable with the CFA type system. The approximation has the known flaw shown in the string-operator test, where a fairly built-up expression that should be ambiguous is actually defaulting to the string version.

This change is the last of the string-overload reorganizations that the string-operator test was originally meant to illustrate. In Mike's opinion, the resulting state is ideal, except for the just-mentioned flaw.

  • Property mode set to 100644
File size: 12.9 KB
Line 
1######################## -*- Mode: Makefile-Automake -*- ######################
2##
3## Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
4##
5## The contents of this file are covered under the licence agreement in the
6## file "LICENCE" distributed with Cforall.
7##
8## Makefile.am --
9##
10## Author           : Peter A. Buhr
11## Created On       : Sun May 31 09:08:15 2015
12## Last Modified By : Peter A. Buhr
13## Last Modified On : Sat Feb  1 08:20:27 2025
14## Update Count     : 201
15###############################################################################
16
17AUTOMAKE_OPTIONS = foreign    # do not require all the GNU file names
18ACLOCAL_AMFLAGS  = -I automake
19
20include $(top_srcdir)/tools/build/cfa.make
21
22DEFAULT_INCLUDES = -I${abs_srcdir}
23
24debug ?= yes
25installed ?= no
26ARCH = ${if ${arch},"--arch=${arch}"}
27arch_support = "x86/x64/arm"
28TIMEOUT = ${if ${timeout},"--timeout=${timeout}"}
29GLOBAL_TIMEOUT = ${if ${global-timeout},"--global-timeout=${global-timeout}"}
30ARCHIVE_ERRORS = ${if ${archive-errors},"--archive-errors=${archive-errors}"}
31
32DEBUG_FLAGS = -debug -g -O0
33
34quick_test = avl_test operators numericConstants expression enum array typeof cast raii/dtor-early-exit raii/init_once attributes meta/dumpable
35
36TEST_PY = python3 ${builddir}/test.py
37
38WFLAGS_STRICT = \
39        -Wall \
40        -Wextra \
41        -Werror
42
43WFLAGS_LAX = \
44        -Wall \
45        -Werror=return-type \
46        -Wno-unused-function \
47        -Wno-psabi
48
49# These tests opt for lax wflags.  (By default, new tests get strict wflags.)
50# Indented list entries are finer-grained targets under the test.
51# Making this association implicit would be ideal, but requires learning more automake than is affordable.
52WFLAGS_OPT_LAX = \
53        ${WFLAGS_OPT_LAX_EXPECT_WARN} \
54        ${WFLAGS_OPT_LAX_WAITING_ON_303} \
55        ${WFLAGS_OPT_LAX_TO_INVESTIGATE}
56
57# Tests checking that cfa-cc raises a certain warning, so -Werror is permanently inappropriate
58WFLAGS_OPT_LAX_EXPECT_WARN = \
59        attr-priority \
60        ctrl-flow/loop_else-WRN1 \
61        warnings/self-assignment
62
63# These are failing because of trac #303; it is not likely to be fixed soon.
64# It only shows up on some configurations and machines.
65WFLAGS_OPT_LAX_WAITING_ON_303 = \
66        concurrency/actors/dynamic \
67        concurrency/actors/executor \
68        concurrency/actors/inherit \
69        concurrency/actors/inline \
70        concurrency/actors/matrixMultiply \
71        concurrency/actors/pingpong \
72        concurrency/actors/poison \
73        concurrency/actors/static \
74        concurrency/actors/types \
75        io/away_fair \
76        io/comp_basic \
77        io/comp_fair \
78        io/many_read
79
80# Tests that need investigation from the CFA team about why they require lax wflags.  Goal is to eliminate this list.
81WFLAGS_OPT_LAX_TO_INVESTIGATE = \
82        forall \
83        include/includes \
84        include/stdincludes \
85        references \
86        tuple/tupleCast \
87        tuple/tupleMember
88
89WFLAGS=${if ${filter ${WFLAGS_OPT_LAX},${@}},${WFLAGS_LAX},${WFLAGS_STRICT}}
90
91# applies to both programs
92# since automake doesn't have support for CFA we have to
93AM_CFLAGS = ${if ${test}, 2> ${test}, } \
94        -fdebug-prefix-map=${abspath ${abs_srcdir}}= \
95        -fdebug-prefix-map=/tmp= \
96        -fno-diagnostics-show-caret \
97        -g \
98        $(WFLAGS) \
99        -quiet @CFA_FLAGS@
100
101AM_CFAFLAGS = -XCFA --deterministic-out
102
103# get the desired cfa to test
104TARGET_CFA = ${if ${filter ${installed},yes}, @CFACC_INSTALL@, @CFACC@}
105
106# adjust CC to current flags
107CC = LC_ALL=C ${if ${DISTCC_CFA_PATH},distcc ${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}
108CFACC = ${CC}
109
110# get local binary for depedencies
111CFACCBIN = @CFACC@
112
113# adjusted CC but without the actual distcc call
114CFACCLOCAL = ${if ${DISTCC_CFA_PATH},${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}
115CFACCLINK = ${CFACCLOCAL} -quiet ${if ${test}, 2> ${test}, } ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}}
116
117PRETTY_PATH = mkdir -p ${dir ${abspath ${@}}} && cd ${srcdir} &&
118
119.PHONY : concurrency list .validate .test_makeflags
120.INTERMEDIATE : .validate .validate.cfa .test_makeflags
121EXTRA_PROGRAMS = array-collections/boxed avl_test linkonce linking/mangling/anon .dummy_hack # build but do not install
122EXTRA_DIST = test.py \
123        pybin/__init__.py \
124        pybin/print-core.gdb \
125        pybin/settings.py \
126        pybin/test_run.py \
127        pybin/tools.py \
128        long_tests.hfa \
129        array-collections/boxed.hfa \
130        array-collections/boxed.cases.hfa \
131        avltree/avl-private.h \
132        avltree/avl.h \
133        exceptions/except-io.hfa \
134        exceptions/with-threads.hfa \
135        meta/fork+exec.hfa \
136        concurrency/clib_tls.c \
137        concurrency/clib.c \
138        concurrency/unified_locking/mutex_test.hfa \
139        concurrency/channels/parallel_harness.hfa \
140        array-collections/dimexpr-match.hfa \
141        array-collections/dimexpr-match-detail.sh \
142        array-collections/array-raii.hfa
143
144dist-hook:
145        echo "Gathering test files"
146        for file in `${TEST_PY} --list-dist`; do \
147                if ls ${srcdir}/$${file} > /dev/null 2>&1; then \
148                        ${MKDIR_P} $$(dirname ${distdir}/$${file}); \
149                        cp -df ${srcdir}/$${file} $$(dirname ${distdir}/$${file}); \
150                fi; \
151        done
152
153array_collections_boxed_SOURCES = array-collections/boxed.main.cfa array-collections/boxed.bookend.cfa
154avl_test_SOURCES = avltree/avl_test.cfa avltree/avl0.cfa avltree/avl1.cfa avltree/avl2.cfa avltree/avl3.cfa avltree/avl4.cfa avltree/avl-private.cfa
155linkonce_SOURCES = link-once/main.cfa link-once/partner.cfa
156linking_mangling_anon_SOURCES = linking/mangling/header.hfa linking/mangling/lib.cfa linking/mangling/main.cfa
157# automake doesn't know we still need C/CPP rules so pretend like we have a C program
158nodist__dummy_hack_SOURCES = .dummy_hack.c .dummy_hackxx.cpp
159
160#----------------------------------------------------------------------------------------------------------------
161
162# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
163all-local : # This name is important to automake and implies the default build target.
164        @+${TEST_PY} --debug=${debug} --install=${installed} ${ARCHIVE_ERRORS} ${TIMEOUT} ${GLOBAL_TIMEOUT} ${ARCH} --all
165
166tests : all-local # synonym
167
168install : all-local  # synonym, PAB only
169
170quick :
171        @+${TEST_PY} --debug=${debug} --install=${installed} ${ARCHIVE_ERRORS} ${ARCH} ${quick_test}
172
173concurrency :
174        @+${TEST_PY} --debug=${debug} --install=${installed} ${ARCHIVE_ERRORS} ${TIMEOUT} ${GLOBAL_TIMEOUT} ${ARCH} -Iconcurrency
175
176list :
177        @+${TEST_PY} --list
178
179help :
180        @echo "user targets:"
181        @echo "    Run the complete test suite."
182        @echo "    $$ make (null) / tests [debug=yes/no] [installed=yes/no] [archive-errors=dump-dir] [timeout=seconds] [global-timeout=seconds] [arch=${arch_support}]"
183        @echo ""
184        @echo "    Run the short (quick) test suite."
185        @echo "    $$ make quick [debug=yes/no] [installed=yes/no] [archive-errors=dump-dir] [arch=${arch_support}]"
186        @echo ""
187        @echo "    Run the concurrency test suite."
188        @echo "    $$ make concurrency [debug=yes/no] [installed=yes/no] [archive-errors=dump-dir] [timeout=seconds] [global-timeout=seconds] [arch=${arch_support}]"
189        @echo ""
190        @echo "    List all tests in the test suite."
191        @echo "    $$ make list"
192
193mostlyclean-local :
194        find ${builddir} -not -path './__pycache__/*' -path '*.o' -delete
195        find ${builddir} -not -path './__pycache__/*' -path '*/.err/*.log' -delete
196        find ${builddir} -not -path './__pycache__/*' -path '*/.out/*.log' -delete
197        rm -f ${EXTRA_PROGRAMS}
198        rm -rf __pycache__
199
200distclean-local :
201        find ${builddir} -path '*.Po' -delete
202
203.test_makeflags:
204        @echo "${MAKEFLAGS}"
205
206.validate: .validate.cfa
207        ${CFACOMPILE} .validate.cfa -fsyntax-only -Wall -Wextra -Werror
208
209.validate.cfa:
210        @echo "int main() { return 0; }" > ${@}
211
212# automake doesn't know we still need C rules so pretend like we have a C program
213.dummy_hack.c:
214        @echo "int main() { return 0; }" > ${@}
215
216.dummy_hackxx.cpp:
217        @echo "int bar() { return 0; }" > ${@}
218
219#----------------------------------------------------------------------------------------------------------------
220
221# Use for all tests, make sure the path are correct and all flags are added
222CFACOMPILETEST=${PRETTY_PATH} ${CFACOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} ${${shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g'}}
223
224#----------------------------------------------------------------------------------------------------------------
225
226# implicit rule so not all test require a rule
227# split into two steps to support compiling remotely using distcc
228# don't use distcc to do the linking because distcc doesn't do linking
229% : %.cfa ${CFACCBIN}
230        ${CFACOMPILETEST} -c -o ${abspath ${@}}.o -DIN_DIR="${abspath ${dir ${<}}}/.in/"
231        ${CFACCLINK} ${@}.o -o ${abspath ${@}}
232        rm ${abspath ${@}}.o
233
234# implicit rule for c++ test
235# convient for testing the testsuite itself but not actuall used
236% : %.cpp
237        ${PRETTY_PATH} ${CXXCOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} -o ${abspath ${@}}
238
239#------------------------------------------------------------------------------
240# TARGETS WITH CUSTOM FLAGS
241#------------------------------------------------------------------------------
242# custom libs
243gmp_FLAGSLD= -lgmp
244
245#------------------------------------------------------------------------------
246# Generated code
247GENERATED_CODE = declarationSpecifier gccExtensions extension attributes functions KRfunctions
248${GENERATED_CODE} : % : %.cfa ${CFACCBIN}
249        ${CFACOMPILETEST} -CFA -XCFA -p -c -fsyntax-only -o ${abspath ${@}}
250
251#------------------------------------------------------------------------------
252# CUSTOM TARGET
253#------------------------------------------------------------------------------
254# tests that just validate syntax and compiler output should be compared to stderr
255CFACOMPILE_SYNTAX = ${CFACOMPILETEST} -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o ${abspath ${@}}
256
257SYNTAX_ONLY_CODE = attr-priority warnings/self-assignment
258
259${SYNTAX_ONLY_CODE} : % : %.cfa ${CFACCBIN}
260        ${CFACOMPILE_SYNTAX}
261        ${if ${test}, cp ${test} ${abspath ${@}}, }
262
263# expected failures
264# use custom target since they require a custom define *and* have a name that doesn't match the file
265
266array-ERR1 : array.cfa ${CFACCBIN}
267        ${CFACOMPILE_SYNTAX} -DERR1
268        -cp ${test} ${abspath ${@}}
269
270array-ERR2 : array.cfa ${CFACCBIN}
271        ${CFACOMPILE_SYNTAX} -DERR2
272        -cp ${test} ${abspath ${@}}
273
274array-ERR3 : array.cfa ${CFACCBIN}
275        ${CFACOMPILE_SYNTAX} -DERR3
276        -cp ${test} ${abspath ${@}}
277
278array-collections/dimexpr-match-c-ERRS : array-collections/dimexpr-match-c.cfa
279        ${CFACOMPILE_SYNTAX} -DERRS
280        -cp ${test} ${abspath ${@}}
281
282array-collections/dimexpr-match-cfa-ERRS : array-collections/dimexpr-match-cfa.cfa
283        ${CFACOMPILE_SYNTAX} -DERRS
284        -cp ${test} ${abspath ${@}}
285
286alloc-ERROR : alloc.cfa ${CFACCBIN}
287        ${CFACOMPILE_SYNTAX} -DERR1
288        -cp ${test} ${abspath ${@}}
289
290collections/string-operator-ERR09 : collections/string-operator.cfa
291        ${CFACOMPILE_SYNTAX} -DTRY_MR09
292        -cp ${test} ${abspath ${@}}
293
294collections/string-operator-ERR11 : collections/string-operator.cfa
295        ${CFACOMPILE_SYNTAX} -DTRY_MR11
296        -cp ${test} ${abspath ${@}}
297
298collections/string-operator-ERR13 : collections/string-operator.cfa
299        ${CFACOMPILE_SYNTAX} -DTRY_MR13
300        -cp ${test} ${abspath ${@}}
301
302collections/string-operator-ERR15 : collections/string-operator.cfa
303        ${CFACOMPILE_SYNTAX} -DTRY_MR15
304        -cp ${test} ${abspath ${@}}
305
306collections/string-operator-ERR16 : collections/string-operator.cfa
307        ${CFACOMPILE_SYNTAX} -DTRY_MR16
308        -cp ${test} ${abspath ${@}}
309
310init1-ERROR : init1.cfa ${CFACCBIN}
311        ${CFACOMPILE_SYNTAX} -DERR1
312        -cp ${test} ${abspath ${@}}
313
314typedefRedef-ERR1 : typedefRedef.cfa ${CFACCBIN}
315        ${CFACOMPILE_SYNTAX} -DERR1
316        -cp ${test} ${abspath ${@}}
317
318nested-types-ERR1 : nested-types.cfa ${CFACCBIN}
319        ${CFACOMPILE_SYNTAX} -DERR1
320        -cp ${test} ${abspath ${@}}
321
322nested-types-ERR2 : nested-types.cfa ${CFACCBIN}
323        ${CFACOMPILE_SYNTAX} -DERR2
324        -cp ${test} ${abspath ${@}}
325
326raii/memberCtors-ERR1 : raii/memberCtors.cfa ${CFACCBIN}
327        ${CFACOMPILE_SYNTAX} -DERR1
328        -cp ${test} ${abspath ${@}}
329
330raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa ${CFACCBIN}
331        ${CFACOMPILE_SYNTAX} -DERR1
332        -cp ${test} ${abspath ${@}}
333
334raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa ${CFACCBIN}
335        ${CFACOMPILE_SYNTAX} -DERR1
336        -cp ${test} ${abspath ${@}}
337
338raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa ${CFACCBIN}
339        ${CFACOMPILE_SYNTAX} -DERR2
340        -cp ${test} ${abspath ${@}}
341
342raii/partial-ERR1 : raii/partial.cfa ${CFACCBIN}
343        ${CFACOMPILE_SYNTAX} -DERR1
344        -cp ${test} ${abspath ${@}}
345
346zero_one-ERR1 : zero_one.cfa ${CFACCBIN}
347        ${CFACOMPILE_SYNTAX} -DERR1
348        -cp ${test} ${abspath ${@}}
349
350ctrl-flow/loop_else : ctrl-flow/loop_else.cfa ${CFACCBIN}
351        ${CC} ${AM_CFLAGS} -Wno-superfluous-else $< -o $@
352
353ctrl-flow/loop_else-WRN1 : ctrl-flow/loop_else.cfa ${CFACCBIN}
354        ${CFACOMPILE_SYNTAX}
355        -cp ${test} ${abspath ${@}}
356
357# Exception Tests
358# Test with libcfathread; it changes how storage works.
359
360exceptions/%-threads : exceptions/%.cfa ${CFACCBIN}
361        ${CFACOMPILETEST} -include exceptions/with-threads.hfa -c -o ${abspath ${@}}.o
362        ${CFACCLOCAL} ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}} ${abspath ${@}}.o -o ${abspath ${@}}
363
364# Linking tests
365# Meta tests to make sure we see linking errors (can't compile with -O2 since it may multiply number of calls)
366linking/linkerror : linking/linkerror.cfa ${CFACCBIN}
367        ${CFACOMPILETEST} -O0 -c -o ${abspath ${@}}.o
368        ${CFACCLINK}  -O0 ${@}.o -o ${abspath ${@}}
369        rm ${abspath ${@}}.o
370
371#------------------------------------------------------------------------------
372# Other targets
Note: See TracBrowser for help on using the repository browser.