Message ID | 20211105211718.2261686-1-rep.dot.nop@gmail.com |
---|---|
Headers | show |
Series | incpath, Fortran: Fix memory leak in gfc_add_include_path | expand |
On Fri, 5 Nov 2021 22:17:16 +0100 Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> wrote: > Hi! > > In order to fix this very minor leak, we need a knob to free all > cpp_dirs that were added. > This adds a free_cpp_dirs() to gcc/incpath and needs review from some > global maintainer or maybe libcpp maintainer for this hunk. One thing that i want to note is that it sounds a tiny bit odd that we (the fortran FE) pull in the usual C paths, but maybe that's deliberate and agreed on? We have in incpath.c: > /* Exported function to handle include chain merging, duplicate > removal, and registration with cpplib. */ > void > register_include_chains (cpp_reader *pfile, const char *sysroot, > const char *iprefix, const char *imultilib, > int stdinc, int cxx_stdinc, int verbose) > { > static const char *const lang_env_vars[] = > { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH", > "OBJC_INCLUDE_PATH", "OBJCPLUS_INCLUDE_PATH" }; > cpp_options *cpp_opts = cpp_get_options (pfile); > size_t idx = (cpp_opts->objc ? 2: 0); > > if (cpp_opts->cplusplus) > idx++; > else > cxx_stdinc = false; > > /* CPATH and language-dependent environment variables may add to the > include chain. */ > add_env_var_paths ("CPATH", INC_BRACKET); > add_env_var_paths (lang_env_vars[idx], INC_SYSTEM); > > target_c_incpath.extra_pre_includes (sysroot, iprefix, stdinc); where we pass cxx_stdinc=0 and cpp_pts->cplusplus==0 (and nobody complains anout that chatty cxx_stdinc=false and not =0 but so be it) I.e. we do honor both CPATH as well as C_INCLUDE_PATH from the env for fortran preprocessing. Maybe we should document this fact somehow as i do not think we want to change it? [ in gcc/doc/cppenv.texi: @itemx OBJC_INCLUDE_PATH @c Commented out until ObjC++ is part of GCC: @c @itemx OBJCPLUS_INCLUDE_PATH where i think objc++ is currently (still) in the tree so maybe someone may want to tweak the docs here. But i digress.. ] gcc/ada/gnat_ugn.texi documents caveats for globally set C_INCLUDE_PATH when using more than one compiler. [It's the only user of :envvar:`` in the tree, everybody else seems to use @env{} btw.] I cannot judge if ada is aware of pulling in CPATH or if maybe they somehow prevent this, didn't look. Thoughts on the env vars for fortran preprocessing? thanks, > > Bootstrapped and regtested on x86_64-unknown-linux without regressions. > Ok for tunk? > > Bernhard Reutner-Fischer (2): > Add free_cpp_dirs() > Fortran: Fix memory leak in gfc_add_include_path [PR68800] > > gcc/fortran/cpp.c | 13 +++++++++++-- > gcc/fortran/cpp.h | 1 + > gcc/fortran/f95-lang.c | 2 +- > gcc/fortran/scanner.c | 7 ++++--- > gcc/incpath.c | 13 +++++++++++++ > gcc/incpath.h | 1 + > 6 files changed, 31 insertions(+), 6 deletions(-) >