The NetBSD Project

CVS log for src/usr.bin/make/unit-tests/varmod-loop.exp

[BACK] Up to [cvs.NetBSD.org] / src / usr.bin / make / unit-tests

Request diff between arbitrary revisions


Keyword substitution: kv
Default branch: MAIN


Revision 1.22: download - view: text, markup, annotated - select for diffs
Thu Oct 31 09:12:13 2024 UTC (8 days, 5 hours ago) by rillig
Branches: MAIN
CVS tags: HEAD
Diff to: previous 1.21: preferred, colored
Changes since revision 1.21: +5 -5 lines
make: in the debug log, always qualify line number with filename

Previously, to find out the filename corresponding to a line number from
a 'Parsing' line, it was necessary to find the preceding
'SetFilenameVars' line, which was unnecessarily time-consuming and
distracting.

The 'filename:line' format matches the one used in PrintStackTrace, and
it differs from the one used in PrintLocation, as the former format is
more common in other tools.

Most of the affected unit tests only use the 'Parsing' lines to give
additional context to their debug log, so no structural changes there.

Revision 1.21: download - view: text, markup, annotated - select for diffs
Sat Jun 1 05:08:48 2024 UTC (5 months, 1 week ago) by rillig
Branches: MAIN
CVS tags: perseant-exfatfs-base-20240630, perseant-exfatfs-base, perseant-exfatfs
Diff to: previous 1.20: preferred, colored
Changes since revision 1.20: +5 -5 lines
make: remove unused VARE_EVAL_KEEP_DOLLAR

Revision 1.20: download - view: text, markup, annotated - select for diffs
Sun Apr 14 12:30:48 2024 UTC (6 months, 3 weeks ago) by rillig
Branches: MAIN
Diff to: previous 1.19: preferred, colored
Changes since revision 1.19: +2 -0 lines
make: add debug logging for .if and .for lines in -dp mode

This helps track down in which line a condition is evaluated.

Revision 1.19: download - view: text, markup, annotated - select for diffs
Sat Feb 18 11:55:20 2023 UTC (20 months, 2 weeks ago) by rillig
Branches: MAIN
Diff to: previous 1.18: preferred, colored
Changes since revision 1.18: +3 -3 lines
tests/make: document the modifier ':@var@body@'

Revision 1.18: download - view: text, markup, annotated - select for diffs
Tue Aug 23 21:13:46 2022 UTC (2 years, 2 months ago) by rillig
Branches: MAIN
CVS tags: netbsd-10-base, netbsd-10-0-RELEASE, netbsd-10-0-RC6, netbsd-10-0-RC5, netbsd-10-0-RC4, netbsd-10-0-RC3, netbsd-10-0-RC2, netbsd-10-0-RC1, netbsd-10
Diff to: previous 1.17: preferred, colored
Changes since revision 1.17: +5 -0 lines
tests/make: document how the modifier ':@' works

Revision 1.17: download - view: text, markup, annotated - select for diffs
Tue Aug 23 19:22:01 2022 UTC (2 years, 2 months ago) by rillig
Branches: MAIN
Diff to: previous 1.16: preferred, colored
Changes since revision 1.16: +0 -1 lines
make: revert parsing of modifier parts (since 2022-08-08)

The modifier ':@var@body@' parses the body in parse-only mode and later
uses Var_Subst on it, in which each literal '$' must be written as '$$'.

Trying to parse the loop body using Var_Parse treated the text
'$${var:-0}' as a single '$' followed by the expression '${var:-0}',
wrongly complaining about the 'Unknown modifier "-0"'.

Found by sjg.

Revision 1.16: download - view: text, markup, annotated - select for diffs
Tue Aug 23 17:40:43 2022 UTC (2 years, 2 months ago) by rillig
Branches: MAIN
Diff to: previous 1.15: preferred, colored
Changes since revision 1.15: +2 -0 lines
tests/make: demonstrate parse error in ':@' modifier (since 2022-08-08)

Reported by sjg via private mail.

Revision 1.15: download - view: text, markup, annotated - select for diffs
Thu Mar 3 19:36:35 2022 UTC (2 years, 8 months ago) by rillig
Branches: MAIN
Diff to: previous 1.14: preferred, colored
Changes since revision 1.14: +2 -2 lines
make: make debug logging for comparisons less technical

Revision 1.14: download - view: text, markup, annotated - select for diffs
Tue Dec 28 15:49:00 2021 UTC (2 years, 10 months ago) by rillig
Branches: MAIN
Diff to: previous 1.13: preferred, colored
Changes since revision 1.13: +3 -3 lines
make: make debug logging a bit more human-friendly

The previous log format "ParseReadLine (%d): '%s'" focused on the
implementation, it was not immediately obvious to a casual reader that
the number in parentheses was the line number.  Additionally, having
both a colon and quotes in a log message is uncommon.  The quotes have
been added in parse.c 1.127 from 2007-01-01.

The new log format "Parsing line %d: %s" is meant to be easier readable
by humans.  The quotes are not needed since ParseReadLine always strips
trailing whitespace, leaving no room for ambiguities.  The other log
messages follow common punctuation rules, which makes the beginning of
the line equally unambiguous.  Before var.c 1.911 from 2021-04-05,
variable assignments were logged with the format "%s:%s = %s", without a
space after the colon.

Revision 1.13: download - view: text, markup, annotated - select for diffs
Sun Dec 5 15:20:13 2021 UTC (2 years, 11 months ago) by rillig
Branches: MAIN
Diff to: previous 1.12: preferred, colored
Changes since revision 1.12: +0 -1 lines
make: fix use-after-free in modifier ':@'

Without memory allocator debugging, the newly added test doesn't show
any obvious failure.

With memory allocator debugging enabled, all make versions since
2016.02.27.16.20.06 crash with a segmentation fault.

Revision 1.12: download - view: text, markup, annotated - select for diffs
Sun Dec 5 15:01:04 2021 UTC (2 years, 11 months ago) by rillig
Branches: MAIN
Diff to: previous 1.11: preferred, colored
Changes since revision 1.11: +1 -0 lines
tests/make: demonstrate use-after-free in modifier ':@'

Revision 1.11: download - view: text, markup, annotated - select for diffs
Tue Nov 30 23:52:19 2021 UTC (2 years, 11 months ago) by rillig
Branches: MAIN
Diff to: previous 1.10: preferred, colored
Changes since revision 1.10: +3 -3 lines
tests/make: test and document .MAKE.SAVE_DOLLARS and ':='

Revision 1.10: download - view: text, markup, annotated - select for diffs
Sun Apr 4 13:20:52 2021 UTC (3 years, 7 months ago) by rillig
Branches: MAIN
CVS tags: cjep_sun2x-base1, cjep_sun2x-base, cjep_sun2x, cjep_staticlib_x-base1, cjep_staticlib_x-base, cjep_staticlib_x
Diff to: previous 1.9: preferred, colored
Changes since revision 1.9: +3 -7 lines
tests/make: split test for modifier ':@' into separate files

The file varmod-loop.mk has grown too large to be single-purpose, plus
it combined parse-time and run-time tests.  This has the downside that
as soon as a parse-time test results in an error, the run-time tests are
not run anymore.

Revision 1.9: download - view: text, markup, annotated - select for diffs
Sun Apr 4 10:13:09 2021 UTC (3 years, 7 months ago) by rillig
Branches: MAIN
Diff to: previous 1.8: preferred, colored
Changes since revision 1.8: +1 -1 lines
make: remove filler word 'Do' from function names for parsing

No functional change, except for debug logging.

Revision 1.8: download - view: text, markup, annotated - select for diffs
Mon Mar 15 17:54:49 2021 UTC (3 years, 7 months ago) by rillig
Branches: MAIN
Diff to: previous 1.7: preferred, colored
Changes since revision 1.7: +4 -10 lines
tests/make: convert varmod-loop to parse-time

In case of unexpected failures, this provides the line number of the
'.error' directive.

Revision 1.7: download - view: text, markup, annotated - select for diffs
Mon Mar 15 17:11:08 2021 UTC (3 years, 7 months ago) by rillig
Branches: MAIN
Diff to: previous 1.6: preferred, colored
Changes since revision 1.6: +4 -3 lines
tests/make: add position marker in test 'varmod-loop'

Revision 1.6: download - view: text, markup, annotated - select for diffs
Tue Feb 23 14:17:21 2021 UTC (3 years, 8 months ago) by rillig
Branches: MAIN
Diff to: previous 1.5: preferred, colored
Changes since revision 1.5: +3 -3 lines
make: demonstrate how to undefine variables during evaluation

For a very long time now, I had thought that it would be impossible to
undefine global variables during the evaluation of variable expressions.
This is something that the memory management in Var_Parse relies upon,
see the comment 'the value of the variable must not change'.

After several unsuccessful attempts at referring to an already freed
previous value of a variable, today I discovered how to unset a global
variable while evaluating an expression, which has the same effect.  To
demonstrate that this use-after-free can reliably crash make, it would
need a memory allocator with a debug mode that never re-allocates the
same memory block after it has been used once.  This is something that
jemalloc cannot do at the moment.  Valgrind would be another idea, but
that has not been ported to NetBSD.

Undefining a global variable while evaluating an expression is made
possible by an implementation detail of the modifier ':@'.  That
modifier undefines the loop variable, without restoring its previous
value, see ApplyModifier_Loop.

By the very old conventions of ODE Make, these loop variables are named
'.V.' and thus do not conflict with variables from other naming
conventions.  In NetBSD and pkgsrc, these loop variables are typically
called 'var', sometimes '_var' with a leading underscore, which also
doesn't conflict with the typical form 'VAR' of variables in the global
namespace.  Therefore, in practice these loop variables don't interfere
with other variables.

One case that can practically arise is when an outer variable has a
modifier ':@word@${VAR.${word}}@' and one of the referenced variables
uses the same variable name in the modifier, see varmod-loop.mk 1.10
line 91 for a detailed explanation.

By using the ${:@VAR@@} modifier in a place that is evaluated with
cmdline scope, it is not only possible to undefine global variables, it
is possible to undefine cmdline variables as well.  When evaluated in a
specific make target, the expression ${:@\@@@} can even be used to
undefine the variable '.TARGET', which will probably crash make with an
assertion failure.

Revision 1.5: download - view: text, markup, annotated - select for diffs
Thu Nov 12 00:40:55 2020 UTC (3 years, 11 months ago) by rillig
Branches: MAIN
Diff to: previous 1.4: preferred, colored
Changes since revision 1.4: +3 -3 lines
make(1): fix tests varmod-defined and varmod-loop regarding dollars

Some derived versions of NetBSD's make set .MAKE.SAVE_DOLLARS to no.  In
these versions, running the tests would fail.  Therefore better set
.MAKE.SAVE_DOLLARS to yes explicitly as far as necessary.

Suggested by sjg.

Revision 1.4: download - view: text, markup, annotated - select for diffs
Sun Nov 8 18:05:32 2020 UTC (4 years ago) by rillig
Branches: MAIN
Diff to: previous 1.3: preferred, colored
Changes since revision 1.3: +8 -0 lines
make(1): add test demonstrating how ':=' and ':@var@' interact

Revision 1.3: download - view: text, markup, annotated - select for diffs
Sun Sep 13 07:32:32 2020 UTC (4 years, 1 month ago) by rillig
Branches: MAIN
Diff to: previous 1.2: preferred, colored
Changes since revision 1.2: +1 -0 lines
make(1): add test for empty variable name in :@var@...@ modifier

Revision 1.2: download - view: text, markup, annotated - select for diffs
Sun Aug 16 12:30:45 2020 UTC (4 years, 2 months ago) by rillig
Branches: MAIN
Diff to: previous 1.1: preferred, colored
Changes since revision 1.1: +15 -0 lines
make(1): move tests for :S, :C, :@ from modmisc to their separate tests

Revision 1.1: download - view: text, markup, annotated - select for diffs
Sun Aug 16 12:07:51 2020 UTC (4 years, 2 months ago) by rillig
Branches: MAIN
make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.

Diff request

This form allows you to request diffs between any two revisions of a file. You may select a symbolic revision name using the selection box or you may type in a numeric name using the type-in text box.

Log view options

CVSweb <webmaster@jp.NetBSD.org>