montnaro@sprite.crd.ge.com (Skip Montanaro) (08/09/89)
I believe at least one of these bugs was reported before, but I didn't
see either one during a quick check of the unexpired articles for this
group. Sorry if these are repeats. The following makefile
MYLIB_SRCS = myfile1.c myfile2.c
MYLIB_OBJS = $(MYLIB_SRCS:%.c=mylib(%.o))
MYLIB_TMP = $(MYLIB_SRCS:%.c=%.o)
MYLIB_OBJS2 = $(foreach f,$(MYLIB_TMP),mylib($f) )
all :
echo $(MYLIB_SRCS)
echo $(MYLIB_OBJS)
echo $(MYLIB_TMP)
echo $(MYLIB_OBJS2)
gives the following output:
sprite% gmake -k -n
echo myfile1.c myfile2.c
echo mylib(myfile1.o mylib(myfile2.o)
echo myfile1.o myfile2.o
Bus error - core dumped
sprite%
One error is in the generation of MYLIB_OBJS. Note the missing paren in
the second line of output.
The core file seems to be generated as a result of evaluating the
foreach construct. For those interested in such things, the traceback
follows. (I wrapped the lines to avoid potential 80-column willies.)
sprite% gdb ~/src/gmake/make-sun3 core
GDB 3.1.1, Copyright (C) 1988 Free Software Foundation, Inc.
There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details.
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "info copying" to see the conditions.
Reading symbol data from /home/kreskin/u0/montnaro/src/gmake/make-sun3...done.
Core file is from "make-sun3".
Program terminated with signal 10, Bus error.
Type "help" for a list of commands.
(gdb) bt
#0 0xecdd10e in ?? ()
#1 0x3ec0 in fatal_error_signal (sig=10) (../commands.c line 442)
#2 0xecc17e4 in ?? ()
#3 0xdc9e in define_variable (name=(char *) 0x2ff24 "f", length=1,
value=(char*) 0x23298 "", origin=o_automatic, recursive=0)
(../variable.c line 127)
#4 0xfc1a in expand_function (o=(char *) 0x2fd80 "",
function=function_foreach, text=(char *) 0x2fe4c "mylib($f) ",
end=(char *) 0x31d9b ")")
(../function.c line 580)
#5 0x11002 in handle_function (op=(char **) 0xeffebfc,
stringp=(char **) 0xeffebf8)
(../function.c line 1107)
#6 0xeaca in variable_expand (line=(char *) 0x31d78
"$(foreach f,$(MYLIB_TMP),mylib($f) )")
(../expand.c line 94)
#7 0xef06 in variable_expand_for_file (line=(char *) 0x31d78
"$(foreach f,$(MYLIB_TMP),mylib($f) )", file=(struct file *) 0x0)
(../expand.c line 263)
#8 0xefae in allocated_variable_expand_for_file (line=(char *) 0x31d78
"$(foreach f,$(MYLIB_TMP),mylib($f) )", file=(struct file *) 0x0)
(../expand.c line 297)
#9 0xef80 in allocated_variable_expand (line=(char *) 0x31d78
"$(foreach f,$(MYLIB_TMP),mylib($f) )") (../expand.c line 282)
#10 0xe9f2 in recursively_expand (v=(struct variable *) 0x31d50)
(../expand.c line 38)
#11 0xed96 in variable_expand (line=(char *) 0x2cf90 "\techo $(MYLIB_OBJS2)")
(../expand.c line 185)
#12 0xef38 in variable_expand_for_file (line=(char *) 0x2cf90
"\techo $(MYLIB_OBJS2)", file=(struct file *) 0x31e28)
(../expand.c line 269)
#13 0xefae in allocated_variable_expand_for_file (line=(char *) 0x2cf90
"\techo $(MYLIB_OBJS2)", file=(struct file *) 0x31e28)
(../expand.c line 297)
#14 0x4658 in start_job (child=(struct child *) 0x2cfb4) (../job.c line 393)
#15 0x47d2 in start_job (child=(struct child *) 0x2cfb4) (../job.c line 474)
#16 0x47d2 in start_job (child=(struct child *) 0x2cfb4) (../job.c line 474)
#17 0x47d2 in start_job (child=(struct child *) 0x2cfb4) (../job.c line 474)
#18 0x3cea in execute_file_commands (file=(struct {...} *) 0x31e28)
(../commands.c line 343)
#19 0xb93e in remake_file (file=(struct {...} *) 0x31e28)
(../remake.c line 618)
#20 0xb3ae in update_file_1 (file=(struct {...} *) 0x31e28, depth=0)
(../remake.c line 394)
#21 0xabd6 in update_file (file=(struct {...} *) 0x31e28, depth=0)
(../remake.c line 169)
#22 0xaa5a in update_goal_chain (goals=(struct {...} *) 0x2c9b0, makefiles=0)
(../remake.c line 93)
#23 0x798a in main (argc=3, argv=(char **) 0xefffaec, envp=(char **) 0xefffafc)
(../main.c line 769)
(gdb)
--
Skip Montanaro (montanaro@sprite.crd.ge.com)