[SV 63100] Set the floc of every created goal dep struct

* src/read.c (eval): Initialize the goaldep floc pointer.
* tests/scripts/features/loadapi: Verify that the floc is set after
unloading and reloading dynamic objects.
This commit is contained in:
Dmitry Goncharov 2022-09-25 17:09:08 -04:00 committed by Paul Smith
parent 38116baee9
commit 6c87f3fb85
2 changed files with 24 additions and 4 deletions

View File

@ -984,6 +984,7 @@ eval (struct ebuffer *ebuf, int set_default)
/* Otherwise add it to the list to be rebuilt. */
deps = alloc_goaldep ();
deps->next = read_files;
deps->floc = ebuf->floc;
read_files = deps;
deps->file = f;
}

View File

@ -24,7 +24,7 @@ print $F <<'EOF' ;
#include "gnumake.h"
char* getenv (const char*);
char *getenv (const char*);
int plugin_is_GPL_compatible;
@ -71,15 +71,22 @@ func_test (const char *funcname, unsigned int argc, char **argv)
}
int
testapi_gmk_setup ()
testapi_gmk_setup (const gmk_floc *floc)
{
const char *verbose = getenv ("TESTAPI_VERBOSE");
gmk_add_function ("test-expand", func_test, 1, 1, GMK_FUNC_DEFAULT);
gmk_add_function ("test-noexpand", func_test, 1, 1, GMK_FUNC_NOEXPAND);
gmk_add_function ("test-eval", func_test, 1, 1, GMK_FUNC_DEFAULT);
gmk_add_function ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.", func_test, 0, 0, 0);
if (getenv ("TESTAPI_VERBOSE"))
printf("testapi_gmk_setup\n");
if (verbose)
{
printf ("testapi_gmk_setup\n");
if (verbose[0] == '2')
printf ("%s:%lu\n", floc->filenm, floc->lineno);
}
if (getenv ("TESTAPI_KEEP"))
return -1;
@ -201,6 +208,18 @@ force:;
.PHONY: force
", '', "testapi_gmk_setup\nhello\n#MAKE#: 'all' is up to date.\n");
# sv 63100.
# Test that make supplies the correct floc when the shared object is loaded
# again.
$ENV{TESTAPI_VERBOSE} = 2;
run_make_test("
load testapi.so
$extra_loads
all:; \$(info \$(test-expand hello))
testapi.so: force; \$(info \$@)
force:;
.PHONY: force
", '', "testapi_gmk_setup\n#MAKEFILE#:2\ntestapi.so\ntestapi_gmk_setup\n#MAKEFILE#:2\nhello\n#MAKE#: 'all' is up to date.\n");
}
unlink(qw(testapi.c testapi.so)) unless $keep;