On Wed, Oct 31, 2018 at 11:02:16AM -0400, Nathan Sidwell wrote: > [Yes, I can't count] > > Include file handling duplicated cleanup code in each exit path. Simpler to > just commonize it with goto. Also noticed a memory leak in buffer popping. > > Applying to trunk. > > -- > Nathan Sidwell
> 2018-10-31 Nathan Sidwell <nat...@acm.org> > > * directives.c (do_include_common): Commonize cleanup path. > (_cpp_pop_buffer): Fix leak. > > Index: libcpp/directives.c > =================================================================== > --- libcpp/directives.c (revision 265671) > +++ libcpp/directives.c (working copy) > @@ -827,22 +827,15 @@ do_include_common (cpp_reader *pfile, en > > fname = parse_include (pfile, &angle_brackets, &buf, &location); > if (!fname) > - { > - if (buf) > - XDELETEVEC (buf); > - return; > - } > + goto done; > > if (!*fname) > - { > - cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0, > - "empty filename in #%s", > - pfile->directive->name); > - XDELETEVEC (fname); > - if (buf) > - XDELETEVEC (buf); > - return; > - } > + { > + cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0, > + "empty filename in #%s", > + pfile->directive->name); > + goto done; > + } > > /* Prevent #include recursion. */ > if (pfile->line_table->depth >= CPP_STACK_MAX) > @@ -860,6 +853,7 @@ do_include_common (cpp_reader *pfile, en > _cpp_stack_include (pfile, fname, angle_brackets, type, location); > } > > + done: > XDELETEVEC (fname); > if (buf) > XDELETEVEC (buf); > @@ -2618,6 +2612,8 @@ _cpp_pop_buffer (cpp_reader *pfile) > > _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0); > } > + else if (to_free) > + free ((void *)to_free); free (NULL) is ok so do you really need the check? Marek