[PATCH] Include path enumeration
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00693.html gcc/ * incpath.h (enum incpath_kind): Name enum, prefix values. (add_path, add_cpp_dir_path, get_added_cpp_dirs): Use incpath_kind. * incpath.c (heads, tails): Use INC_MAX. (add_env_var_paths, add_standard_paths): Use incpath_kind. (merge_include_chains, split_quote_chain, register_include_chains): Update incpath_kind names. (add_cpp_dir_path, add_path, get_added_cpp_dirs): Use incpath_kind. * config/darwin-c.c (add_system_framework_path): Update incpath_kind names. (add_framework_path, darwin_register_objc_includes): Likewise. * config/vms/vms-c.c (vms_c_register_includes): Likewise. gcc/c-family/ * c-opts.c (add_prefixed_path): Change chain to incpath_kind. (c_common_handle_option): Update incpath_kind names. gcc/fortran/ * cpp.c (gfc_cpp_add_include_path): Update incpath_e names. (gfc_cpp_add_include_path_after): Likewise. From-SVN: r253654
This commit is contained in:
parent
42851ff81d
commit
b90c933812
@ -1,3 +1,17 @@
|
||||
2017-10-11 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* incpath.h (enum incpath_kind): Name enum, prefix values.
|
||||
(add_path, add_cpp_dir_path, get_added_cpp_dirs): Use incpath_kind.
|
||||
* incpath.c (heads, tails): Use INC_MAX.
|
||||
(add_env_var_paths, add_standard_paths): Use incpath_kind.
|
||||
(merge_include_chains, split_quote_chain,
|
||||
register_include_chains): Update incpath_kind names.
|
||||
(add_cpp_dir_path, add_path, get_added_cpp_dirs): Use incpath_kind.
|
||||
* config/darwin-c.c (add_system_framework_path): Update incpath_kind
|
||||
names.
|
||||
(add_framework_path, darwin_register_objc_includes): Likewise.
|
||||
* config/vms/vms-c.c (vms_c_register_includes): Likewise.
|
||||
|
||||
2017-10-11 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md (*cmp<X87MODEF:mode>_<SWI24:mode>_i387):
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-10-11 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* c-opts.c (add_prefixed_path): Change chain to incpath_kind.
|
||||
(c_common_handle_option): Update incpath_kind names.
|
||||
|
||||
2017-10-11 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitizer/82490
|
||||
|
@ -118,7 +118,7 @@ static void set_std_c11 (int);
|
||||
static void check_deps_environment_vars (void);
|
||||
static void handle_deferred_opts (void);
|
||||
static void sanitize_cpp_opts (void);
|
||||
static void add_prefixed_path (const char *, size_t);
|
||||
static void add_prefixed_path (const char *, incpath_kind);
|
||||
static void push_command_line_include (void);
|
||||
static void cb_file_change (cpp_reader *, const line_map_ordinary *);
|
||||
static void cb_dir_change (cpp_reader *, const char *);
|
||||
@ -316,7 +316,7 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
|
||||
case OPT_I:
|
||||
if (strcmp (arg, "-"))
|
||||
add_path (xstrdup (arg), BRACKET, 0, true);
|
||||
add_path (xstrdup (arg), INC_BRACKET, 0, true);
|
||||
else
|
||||
{
|
||||
if (quote_chain_split)
|
||||
@ -550,7 +550,7 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
break;
|
||||
|
||||
case OPT_idirafter:
|
||||
add_path (xstrdup (arg), AFTER, 0, true);
|
||||
add_path (xstrdup (arg), INC_AFTER, 0, true);
|
||||
break;
|
||||
|
||||
case OPT_imacros:
|
||||
@ -567,7 +567,7 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
break;
|
||||
|
||||
case OPT_iquote:
|
||||
add_path (xstrdup (arg), QUOTE, 0, true);
|
||||
add_path (xstrdup (arg), INC_QUOTE, 0, true);
|
||||
break;
|
||||
|
||||
case OPT_isysroot:
|
||||
@ -575,15 +575,15 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
break;
|
||||
|
||||
case OPT_isystem:
|
||||
add_path (xstrdup (arg), SYSTEM, 0, true);
|
||||
add_path (xstrdup (arg), INC_SYSTEM, 0, true);
|
||||
break;
|
||||
|
||||
case OPT_iwithprefix:
|
||||
add_prefixed_path (arg, SYSTEM);
|
||||
add_prefixed_path (arg, INC_SYSTEM);
|
||||
break;
|
||||
|
||||
case OPT_iwithprefixbefore:
|
||||
add_prefixed_path (arg, BRACKET);
|
||||
add_prefixed_path (arg, INC_BRACKET);
|
||||
break;
|
||||
|
||||
case OPT_lang_asm:
|
||||
@ -1326,7 +1326,7 @@ sanitize_cpp_opts (void)
|
||||
|
||||
/* Add include path with a prefix at the front of its name. */
|
||||
static void
|
||||
add_prefixed_path (const char *suffix, size_t chain)
|
||||
add_prefixed_path (const char *suffix, incpath_kind chain)
|
||||
{
|
||||
char *path;
|
||||
const char *prefix;
|
||||
|
@ -433,7 +433,7 @@ add_system_framework_path (char *path)
|
||||
p->construct = framework_construct_pathname;
|
||||
using_frameworks = 1;
|
||||
|
||||
add_cpp_dir_path (p, SYSTEM);
|
||||
add_cpp_dir_path (p, INC_SYSTEM);
|
||||
}
|
||||
|
||||
/* Add PATH to the bracket includes. PATH must be malloc-ed and
|
||||
@ -451,7 +451,7 @@ add_framework_path (char *path)
|
||||
p->construct = framework_construct_pathname;
|
||||
using_frameworks = 1;
|
||||
|
||||
add_cpp_dir_path (p, BRACKET);
|
||||
add_cpp_dir_path (p, INC_BRACKET);
|
||||
}
|
||||
|
||||
static const char *framework_defaults [] =
|
||||
@ -488,7 +488,7 @@ darwin_register_objc_includes (const char *sysroot, const char *iprefix,
|
||||
{
|
||||
str = concat (iprefix, fname + len, NULL);
|
||||
/* FIXME: wrap the headers for C++awareness. */
|
||||
add_path (str, SYSTEM, /*c++aware=*/false, false);
|
||||
add_path (str, INC_SYSTEM, /*c++aware=*/false, false);
|
||||
}
|
||||
|
||||
/* Should this directory start with the sysroot? */
|
||||
@ -497,7 +497,7 @@ darwin_register_objc_includes (const char *sysroot, const char *iprefix,
|
||||
else
|
||||
str = update_path (fname, "");
|
||||
|
||||
add_path (str, SYSTEM, /*c++aware=*/false, false);
|
||||
add_path (str, INC_SYSTEM, /*c++aware=*/false, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -418,7 +418,7 @@ vms_c_register_includes (const char *sysroot,
|
||||
if (!stdinc)
|
||||
return;
|
||||
|
||||
for (dir = get_added_cpp_dirs (SYSTEM); dir != NULL; dir = dir->next)
|
||||
for (dir = get_added_cpp_dirs (INC_SYSTEM); dir != NULL; dir = dir->next)
|
||||
{
|
||||
const char * const *lib;
|
||||
for (lib = vms_std_modules; *lib != NULL; lib++)
|
||||
@ -441,7 +441,7 @@ vms_c_register_includes (const char *sysroot,
|
||||
p->sysp = 1;
|
||||
p->construct = vms_construct_include_filename;
|
||||
p->user_supplied_p = 0;
|
||||
add_cpp_dir_path (p, SYSTEM);
|
||||
add_cpp_dir_path (p, INC_SYSTEM);
|
||||
}
|
||||
else
|
||||
free (path);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-10-11 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* cpp.c (gfc_cpp_add_include_path): Update incpath_e names.
|
||||
(gfc_cpp_add_include_path_after): Likewise.
|
||||
|
||||
2017-10-10 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
|
||||
* target-memory.c (gfc_interpret_logical): Use wi::to_wide when
|
||||
|
@ -683,14 +683,14 @@ gfc_cpp_add_include_path (char *path, bool user_supplied)
|
||||
include path. Fortran does not define any system include paths. */
|
||||
int cxx_aware = 0;
|
||||
|
||||
add_path (path, BRACKET, cxx_aware, user_supplied);
|
||||
add_path (path, INC_BRACKET, cxx_aware, user_supplied);
|
||||
}
|
||||
|
||||
void
|
||||
gfc_cpp_add_include_path_after (char *path, bool user_supplied)
|
||||
{
|
||||
int cxx_aware = 0;
|
||||
add_path (path, AFTER, cxx_aware, user_supplied);
|
||||
add_path (path, INC_AFTER, cxx_aware, user_supplied);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -46,7 +46,7 @@
|
||||
|
||||
static const char dir_separator_str[] = { DIR_SEPARATOR, 0 };
|
||||
|
||||
static void add_env_var_paths (const char *, int);
|
||||
static void add_env_var_paths (const char *, incpath_kind);
|
||||
static void add_standard_paths (const char *, const char *, const char *, int);
|
||||
static void free_path (struct cpp_dir *, int);
|
||||
static void merge_include_chains (const char *, cpp_reader *, int);
|
||||
@ -56,8 +56,9 @@ static struct cpp_dir *remove_duplicates (cpp_reader *, struct cpp_dir *,
|
||||
struct cpp_dir *, int);
|
||||
|
||||
/* Include chains heads and tails. */
|
||||
static struct cpp_dir *heads[4];
|
||||
static struct cpp_dir *tails[4];
|
||||
static struct cpp_dir *heads[INC_MAX];
|
||||
static struct cpp_dir *tails[INC_MAX];
|
||||
|
||||
static bool quote_ignores_source_dir;
|
||||
enum { REASON_QUIET = 0, REASON_NOENT, REASON_DUP, REASON_DUP_SYS };
|
||||
|
||||
@ -92,7 +93,7 @@ free_path (struct cpp_dir *path, int reason)
|
||||
/* Read ENV_VAR for a PATH_SEPARATOR-separated list of file names; and
|
||||
append all the names to the search path CHAIN. */
|
||||
static void
|
||||
add_env_var_paths (const char *env_var, int chain)
|
||||
add_env_var_paths (const char *env_var, incpath_kind chain)
|
||||
{
|
||||
char *p, *q, *path;
|
||||
|
||||
@ -116,7 +117,7 @@ add_env_var_paths (const char *env_var, int chain)
|
||||
path[q - p] = '\0';
|
||||
}
|
||||
|
||||
add_path (path, chain, chain == SYSTEM, false);
|
||||
add_path (path, chain, chain == INC_SYSTEM, false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -159,7 +160,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
|
||||
str = reconcat (str, str, dir_separator_str,
|
||||
imultiarch, NULL);
|
||||
}
|
||||
add_path (str, SYSTEM, p->cxx_aware, false);
|
||||
add_path (str, INC_SYSTEM, p->cxx_aware, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -225,7 +226,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
|
||||
str = reconcat (str, str, dir_separator_str, imultiarch, NULL);
|
||||
}
|
||||
|
||||
add_path (str, SYSTEM, p->cxx_aware, false);
|
||||
add_path (str, INC_SYSTEM, p->cxx_aware, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -349,29 +350,32 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
|
||||
/* Add the sysroot to user-supplied paths starting with "=". */
|
||||
if (sysroot)
|
||||
{
|
||||
add_sysroot_to_chain (sysroot, QUOTE);
|
||||
add_sysroot_to_chain (sysroot, BRACKET);
|
||||
add_sysroot_to_chain (sysroot, SYSTEM);
|
||||
add_sysroot_to_chain (sysroot, AFTER);
|
||||
add_sysroot_to_chain (sysroot, INC_QUOTE);
|
||||
add_sysroot_to_chain (sysroot, INC_BRACKET);
|
||||
add_sysroot_to_chain (sysroot, INC_SYSTEM);
|
||||
add_sysroot_to_chain (sysroot, INC_AFTER);
|
||||
}
|
||||
|
||||
/* Join the SYSTEM and AFTER chains. Remove duplicates in the
|
||||
resulting SYSTEM chain. */
|
||||
if (heads[SYSTEM])
|
||||
tails[SYSTEM]->next = heads[AFTER];
|
||||
if (heads[INC_SYSTEM])
|
||||
tails[INC_SYSTEM]->next = heads[INC_AFTER];
|
||||
else
|
||||
heads[SYSTEM] = heads[AFTER];
|
||||
heads[SYSTEM] = remove_duplicates (pfile, heads[SYSTEM], 0, 0, verbose);
|
||||
heads[INC_SYSTEM] = heads[INC_AFTER];
|
||||
heads[INC_SYSTEM]
|
||||
= remove_duplicates (pfile, heads[INC_SYSTEM], 0, 0, verbose);
|
||||
|
||||
/* Remove duplicates from BRACKET that are in itself or SYSTEM, and
|
||||
join it to SYSTEM. */
|
||||
heads[BRACKET] = remove_duplicates (pfile, heads[BRACKET], heads[SYSTEM],
|
||||
heads[SYSTEM], verbose);
|
||||
heads[INC_BRACKET]
|
||||
= remove_duplicates (pfile, heads[INC_BRACKET], heads[INC_SYSTEM],
|
||||
heads[INC_SYSTEM], verbose);
|
||||
|
||||
/* Remove duplicates from QUOTE that are in itself or SYSTEM, and
|
||||
join it to BRACKET. */
|
||||
heads[QUOTE] = remove_duplicates (pfile, heads[QUOTE], heads[SYSTEM],
|
||||
heads[BRACKET], verbose);
|
||||
heads[INC_QUOTE]
|
||||
= remove_duplicates (pfile, heads[INC_QUOTE], heads[INC_SYSTEM],
|
||||
heads[INC_BRACKET], verbose);
|
||||
|
||||
/* If verbose, print the list of dirs to search. */
|
||||
if (verbose)
|
||||
@ -379,9 +383,9 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
|
||||
struct cpp_dir *p;
|
||||
|
||||
fprintf (stderr, _("#include \"...\" search starts here:\n"));
|
||||
for (p = heads[QUOTE];; p = p->next)
|
||||
for (p = heads[INC_QUOTE];; p = p->next)
|
||||
{
|
||||
if (p == heads[BRACKET])
|
||||
if (p == heads[INC_BRACKET])
|
||||
fprintf (stderr, _("#include <...> search starts here:\n"));
|
||||
if (!p)
|
||||
break;
|
||||
@ -398,14 +402,14 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
|
||||
void
|
||||
split_quote_chain (void)
|
||||
{
|
||||
if (heads[QUOTE])
|
||||
free_path (heads[QUOTE], REASON_QUIET);
|
||||
if (tails[QUOTE])
|
||||
free_path (tails[QUOTE], REASON_QUIET);
|
||||
heads[QUOTE] = heads[BRACKET];
|
||||
tails[QUOTE] = tails[BRACKET];
|
||||
heads[BRACKET] = NULL;
|
||||
tails[BRACKET] = NULL;
|
||||
if (heads[INC_QUOTE])
|
||||
free_path (heads[INC_QUOTE], REASON_QUIET);
|
||||
if (tails[INC_QUOTE])
|
||||
free_path (tails[INC_QUOTE], REASON_QUIET);
|
||||
heads[INC_QUOTE] = heads[INC_BRACKET];
|
||||
tails[INC_QUOTE] = tails[INC_BRACKET];
|
||||
heads[INC_BRACKET] = NULL;
|
||||
tails[INC_BRACKET] = NULL;
|
||||
/* This is NOT redundant. */
|
||||
quote_ignores_source_dir = true;
|
||||
}
|
||||
@ -413,7 +417,7 @@ split_quote_chain (void)
|
||||
/* Add P to the chain specified by CHAIN. */
|
||||
|
||||
void
|
||||
add_cpp_dir_path (cpp_dir *p, int chain)
|
||||
add_cpp_dir_path (cpp_dir *p, incpath_kind chain)
|
||||
{
|
||||
if (tails[chain])
|
||||
tails[chain]->next = p;
|
||||
@ -425,7 +429,7 @@ add_cpp_dir_path (cpp_dir *p, int chain)
|
||||
/* Add PATH to the include chain CHAIN. PATH must be malloc-ed and
|
||||
NUL-terminated. */
|
||||
void
|
||||
add_path (char *path, int chain, int cxx_aware, bool user_supplied_p)
|
||||
add_path (char *path, incpath_kind chain, int cxx_aware, bool user_supplied_p)
|
||||
{
|
||||
cpp_dir *p;
|
||||
|
||||
@ -450,7 +454,7 @@ add_path (char *path, int chain, int cxx_aware, bool user_supplied_p)
|
||||
#ifndef INO_T_EQ
|
||||
p->canonical_name = lrealpath (path);
|
||||
#endif
|
||||
if (chain == SYSTEM || chain == AFTER)
|
||||
if (chain == INC_SYSTEM || chain == INC_AFTER)
|
||||
p->sysp = 1 + !cxx_aware;
|
||||
else
|
||||
p->sysp = 0;
|
||||
@ -480,8 +484,8 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
|
||||
|
||||
/* CPATH and language-dependent environment variables may add to the
|
||||
include chain. */
|
||||
add_env_var_paths ("CPATH", BRACKET);
|
||||
add_env_var_paths (lang_env_vars[idx], SYSTEM);
|
||||
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);
|
||||
|
||||
@ -493,14 +497,14 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
|
||||
|
||||
merge_include_chains (sysroot, pfile, verbose);
|
||||
|
||||
cpp_set_include_chains (pfile, heads[QUOTE], heads[BRACKET],
|
||||
cpp_set_include_chains (pfile, heads[INC_QUOTE], heads[INC_BRACKET],
|
||||
quote_ignores_source_dir);
|
||||
}
|
||||
|
||||
/* Return the current chain of cpp dirs. */
|
||||
|
||||
struct cpp_dir *
|
||||
get_added_cpp_dirs (int chain)
|
||||
get_added_cpp_dirs (incpath_kind chain)
|
||||
{
|
||||
return heads[chain];
|
||||
}
|
||||
|
@ -18,13 +18,22 @@
|
||||
#ifndef GCC_INCPATH_H
|
||||
#define GCC_INCPATH_H
|
||||
|
||||
/* Various fragments of include path. */
|
||||
enum incpath_kind {
|
||||
INC_QUOTE = 0, /* include "foo" */
|
||||
INC_BRACKET, /* include <foo> */
|
||||
INC_SYSTEM, /* sysinclude */
|
||||
INC_AFTER, /* post-sysinclude. */
|
||||
INC_MAX
|
||||
};
|
||||
|
||||
extern void split_quote_chain (void);
|
||||
extern void add_path (char *, int, int, bool);
|
||||
extern void add_path (char *, incpath_kind, int, bool);
|
||||
extern void register_include_chains (cpp_reader *, const char *,
|
||||
const char *, const char *,
|
||||
int, int, int);
|
||||
extern void add_cpp_dir_path (struct cpp_dir *, int);
|
||||
extern struct cpp_dir *get_added_cpp_dirs (int);
|
||||
extern void add_cpp_dir_path (struct cpp_dir *, incpath_kind);
|
||||
extern struct cpp_dir *get_added_cpp_dirs (incpath_kind);
|
||||
|
||||
struct target_c_incpath_s {
|
||||
/* Do extra includes processing. STDINC is false iff -nostdinc was given. */
|
||||
@ -34,6 +43,4 @@ struct target_c_incpath_s {
|
||||
|
||||
extern struct target_c_incpath_s target_c_incpath;
|
||||
|
||||
enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
|
||||
|
||||
#endif /* GCC_INCPATH_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user