From f7b055c48c7a54f17510aaad39cd5aead6e3f34d Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 19 Dec 2017 13:27:55 +0000 Subject: [PATCH] [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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255820 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/opts.c | 26 ++++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 63b2ff5406f..220d5534c89 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-12-19 Nathan Sidwell + + * opts.c (finish_options): Don't prefix dump_base_name if it + already contains directories. + 2017-12-19 Martin Liska PR rtl-optimization/82675 diff --git a/gcc/opts.c b/gcc/opts.c index a157b5f8816..d779744ebb4 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 -- 2.11.4.GIT