This patch makes sure that we set the directory prefix of dump_base_name only once, otherwise we'd end up with invalid path, resulting in error: could not open dump file ... This happened because finish_options is called for every optimize attribute and once more for command line options and every time it added the directory prefix.
Regtested/bootstrapped on x86_64-linux, ok for trunk? 2014-03-14 Jakub Jelinek <ja...@redhat.com> Marek Polacek <pola...@redhat.com> PR middle-end/60484 * common.opt (dump_base_name_prefixed): New Variable. * opts.c (finish_options): Don't prepend directory to x_dump_base_name if x_dump_base_name_prefixed is already set, set it at the end. diff --git gcc/common.opt gcc/common.opt index 661516d..d8918d1 100644 --- gcc/common.opt +++ gcc/common.opt @@ -211,6 +211,10 @@ bool flag_opts_finished Variable unsigned int flag_sanitize +; Flag whether a prefix has been added to dump_base_name +Variable +bool dump_base_name_prefixed = false + ### Driver diff --git gcc/opts.c gcc/opts.c index 5dd442f..41c1a73 100644 --- gcc/opts.c +++ gcc/opts.c @@ -645,7 +645,9 @@ 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)) + 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 @@ -675,6 +677,7 @@ 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; } /* Handle related options for unit-at-a-time, toplevel-reorder, and Marek