aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts.c
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2017-12-19 13:27:55 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2017-12-19 13:27:55 +0000
commitf35629b75661cce9236f69be740d16ed39e15c92 (patch)
treeac61920c55c77eb06ce0b6115364cf228eff0575 /gcc/opts.c
parent02db1ea393065ef3b6f9a5d737abd8fbc1ad72ea (diff)
downloadgcc-f35629b75661cce9236f69be740d16ed39e15c92.zip
gcc-f35629b75661cce9236f69be740d16ed39e15c92.tar.gz
gcc-f35629b75661cce9236f69be740d16ed39e15c92.tar.bz2
[PATCH] -fdump-tree, -save-temps=obj & subdirs
https://gcc.gnu.org/ml/gcc-patches/2017-12/msg00377.html * opts.c (finish_options): Don't prefix dump_base_name if it already contains directories. From-SVN: r255820
Diffstat (limited to 'gcc/opts.c')
-rw-r--r--gcc/opts.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/gcc/opts.c b/gcc/opts.c
index a157b5f..d779744 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -700,19 +700,27 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
enum unwind_info_type ui_except;
if (opts->x_dump_base_name
- && ! IS_ABSOLUTE_PATH (opts->x_dump_base_name)
&& ! opts->x_dump_base_name_prefixed)
{
- /* First try to make OPTS->X_DUMP_BASE_NAME relative to the
- OPTS->X_DUMP_DIR_NAME directory. Then try to make
- OPTS->X_DUMP_BASE_NAME relative to the OPTS->X_AUX_BASE_NAME
- directory, typically the directory to contain the object
- file. */
- if (opts->x_dump_dir_name)
+ const char *sep = opts->x_dump_base_name;
+
+ for (; *sep; sep++)
+ if (IS_DIR_SEPARATOR (*sep))
+ break;
+
+ if (*sep)
+ /* If dump_base_path contains subdirectories, don't prepend
+ anything. */;
+ else if (opts->x_dump_dir_name)
+ /* We have a DUMP_DIR_NAME, prepend that. */
opts->x_dump_base_name = opts_concat (opts->x_dump_dir_name,
opts->x_dump_base_name, NULL);
else if (opts->x_aux_base_name
&& strcmp (opts->x_aux_base_name, HOST_BIT_BUCKET) != 0)
+ /* AUX_BASE_NAME is set and is not the bit bucket. If it
+ contains a directory component, prepend those directories.
+ Typically this places things in the same directory as the
+ object file. */
{
const char *aux_base;
@@ -731,7 +739,9 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
opts->x_dump_base_name = new_dump_base_name;
}
}
- opts->x_dump_base_name_prefixed = true;
+
+ /* It is definitely prefixed now. */
+ opts->x_dump_base_name_prefixed = true;
}
/* Handle related options for unit-at-a-time, toplevel-reorder, and