* main.c (die): Close output_context AND make_sync.

die() can be invoked inside a separate output_context, if the
$(error ...) function is expanded as part of a recipe.
This commit is contained in:
Paul Smith 2014-01-11 16:10:02 -05:00
parent 432cb6575d
commit 9c8b68a905
2 changed files with 14 additions and 2 deletions

9
main.c
View file

@ -3406,9 +3406,14 @@ die (int status)
if (output_context)
{
assert (output_context == &make_sync);
/* die() might be called in a recipe output context due to an
$(error ...) function. */
output_close (output_context);
if (output_context != &make_sync)
output_close (&make_sync);
OUTPUT_UNSET ();
output_close (&make_sync);
}
output_close (NULL);

View file

@ -330,5 +330,12 @@ t1: ; -\@\$(MAKE) -f $m1
rmfiles($m1);
# Test $(error ...) functions in recipes
run_make_test(q!
foo: $(OBJS) ; echo $(or $(filter %.o,$^),$(error fail))
!,
'-O', "#MAKEFILE#:2: *** fail. Stop.\n", 512);
# This tells the test driver that the perl test script executed properly.
1;