]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Let process_args use orig_args from ctx
authorJoel Rosdahl <joel@rosdahl.net>
Fri, 1 May 2020 17:44:03 +0000 (19:44 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Mon, 4 May 2020 20:40:55 +0000 (22:40 +0200)
src/ccache.cpp
src/ccache.hpp
unittest/test_argument_processing.cpp

index eacbd38212ec6396619ecf47b898a701e65ba49d..2d6d4792f4aa5e89cd92fce4a0640f7c56c3750f 100644 (file)
@@ -2177,7 +2177,6 @@ process_profiling_option(Context& ctx, const std::string& arg)
 // incremented.
 optional<enum stats>
 process_args(Context& ctx,
-             const Args& args,
              Args& preprocessor_args,
              Args& extra_args_to_hash,
              Args& compiler_args)
@@ -2210,7 +2209,7 @@ process_args(Context& ctx,
   // expanded_args is a copy of the original arguments given to the compiler
   // but with arguments from @file and similar constructs expanded. It's only
   // used as a temporary data structure to loop over.
-  Args expanded_args = args;
+  Args expanded_args = ctx.orig_args;
 
   // common_args contains all original arguments except:
   // * those that never should be passed to the preprocessor,
@@ -3528,8 +3527,8 @@ do_cache_compilation(Context& ctx, const char* const* argv)
   Args compiler_args;
   MTR_BEGIN("main", "process_args");
 
-  auto error = process_args(
-    ctx, ctx.orig_args, preprocessor_args, extra_args_to_hash, compiler_args);
+  auto error =
+    process_args(ctx, preprocessor_args, extra_args_to_hash, compiler_args);
   if (error) {
     failed(*error);
   }
index b52f453546890000da9fed2017b996bdbd3bafc1..4cb171b400497730e5960f5744fcc75ee2ff89e0 100644 (file)
@@ -62,7 +62,6 @@ enum class GuessedCompiler { clang, gcc, nvcc, pump, unknown };
 void block_signals();
 void unblock_signals();
 nonstd::optional<enum stats> process_args(Context& ctx,
-                                          const Args& args,
                                           Args& preprocessor_args,
                                           Args& extra_args_to_hash,
                                           Args& compiler_args);
index 4fc681920b569444baf42942c09ff358767a19ac..576b5fcc878ef4071909b6a5989a246768c0e29c 100644 (file)
@@ -71,13 +71,13 @@ TEST(dash_E_should_result_in_called_for_preprocessing)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -c foo.c -E");
+  ctx.orig_args = Args::from_string("cc -c foo.c -E");
   Args preprocessed;
   Args extra;
   Args compiler;
 
   create_file("foo.c", "");
-  CHECK(process_args(ctx, orig, preprocessed, extra, compiler)
+  CHECK(process_args(ctx, preprocessed, extra, compiler)
         == STATS_PREPROCESSING);
 }
 
@@ -85,13 +85,13 @@ TEST(dash_M_should_be_unsupported)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -c foo.c -M");
+  ctx.orig_args = Args::from_string("cc -c foo.c -M");
   Args preprocessed;
   Args extra;
   Args compiler;
 
   create_file("foo.c", "");
-  CHECK(process_args(ctx, orig, preprocessed, extra, compiler)
+  CHECK(process_args(ctx, preprocessed, extra, compiler)
         == STATS_UNSUPPORTED_OPTION);
 }
 
@@ -102,7 +102,7 @@ TEST(dependency_args_to_preprocessor_if_run_second_cpp_is_false)
 #define DEP_ARGS                                                               \
   "-MD -MMD -MP -MF foo.d -MT mt1 -MT mt2 -MQ mq1 -MQ mq2 -Wp,-MD,wpmd"        \
   " -Wp,-MMD,wpmmd -Wp,-MP -Wp,-MT,wpmt -Wp,-MQ,wpmq -Wp,-MF,wpf"
-  Args orig = args_init_from_string("cc " DEP_ARGS " -c foo.c -o foo.o");
+  ctx.orig_args = Args::from_string("cc " DEP_ARGS " -c foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc " DEP_ARGS);
   Args exp_extra = args_init(0, NULL);
   Args exp_cc = args_init_from_string("cc -c");
@@ -113,7 +113,7 @@ TEST(dependency_args_to_preprocessor_if_run_second_cpp_is_false)
   create_file("foo.c", "");
 
   ctx.config.set_run_second_cpp(false);
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -126,7 +126,7 @@ TEST(dependency_args_to_compiler_if_run_second_cpp_is_true)
 #define DEP_ARGS                                                               \
   "-MD -MMD -MP -MF foo.d -MT mt1 -MT mt2 -MQ mq1 -MQ mq2 -Wp,-MD,wpmd"        \
   " -Wp,-MMD,wpmmd -Wp,-MP -Wp,-MT,wpmt -Wp,-MQ,wpmq -Wp,-MF,wpf"
-  Args orig = args_init_from_string("cc " DEP_ARGS " -c foo.c -o foo.o");
+  ctx.orig_args = Args::from_string("cc " DEP_ARGS " -c foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string(DEP_ARGS);
   Args exp_cc = args_init_from_string("cc -c " DEP_ARGS);
@@ -136,7 +136,7 @@ TEST(dependency_args_to_compiler_if_run_second_cpp_is_true)
   Args act_cc;
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -154,8 +154,8 @@ TEST(cpp_only_args_to_preprocessor_if_run_second_cpp_is_false)
 #define DEP_ARGS                                                               \
   "-MD -MMD -MP -MF foo.d -MT mt1 -MT mt2 -MQ mq1 -MQ mq2 -Wp,-MD,wpmd"        \
   " -Wp,-MMD,wpmmd -Wp,-MP -Wp,-MT,wpmt -Wp,-MQ,wpmq -Wp,-MF,wpf"
-  Args orig =
-    args_init_from_string("cc " CPP_ARGS " " DEP_ARGS " -c foo.c -o foo.o");
+  ctx.orig_args =
+    Args::from_string("cc " CPP_ARGS " " DEP_ARGS " -c foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc " CPP_ARGS " " DEP_ARGS);
   Args exp_extra = args_init(0, NULL);
   Args exp_cc = args_init_from_string("cc -c");
@@ -167,7 +167,7 @@ TEST(cpp_only_args_to_preprocessor_if_run_second_cpp_is_false)
   create_file("foo.c", "");
 
   ctx.config.set_run_second_cpp(false);
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -185,8 +185,8 @@ TEST(cpp_only_args_to_preprocessor_and_compiler_if_run_second_cpp_is_true)
 #define DEP_ARGS                                                               \
   " -MD -MMD -MP -MF foo.d -MT mt1 -MT mt2 -MQ mq1 -MQ mq2 -Wp,-MD,wpmd"       \
   " -Wp,-MMD,wpmmd"
-  Args orig =
-    args_init_from_string("cc " CPP_ARGS " " DEP_ARGS " -c foo.c -o foo.o");
+  ctx.orig_args =
+    Args::from_string("cc " CPP_ARGS " " DEP_ARGS " -c foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc " CPP_ARGS);
   Args exp_extra = args_init_from_string(DEP_ARGS);
   Args exp_cc = args_init_from_string("cc " CPP_ARGS " -c " DEP_ARGS);
@@ -197,7 +197,7 @@ TEST(cpp_only_args_to_preprocessor_and_compiler_if_run_second_cpp_is_true)
   Args act_cc;
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -208,7 +208,7 @@ TEST(dependency_args_that_take_an_argument_should_not_require_space_delimiter)
   Context ctx;
 
 #define DEP_ARGS "-MMD -MFfoo.d -MT mt -MTmt -MQmq"
-  Args orig = args_init_from_string("cc -c " DEP_ARGS " foo.c -o foo.o");
+  ctx.orig_args = Args::from_string("cc -c " DEP_ARGS " foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string(DEP_ARGS);
   Args exp_cc = args_init_from_string("cc -c " DEP_ARGS);
@@ -218,7 +218,7 @@ TEST(dependency_args_that_take_an_argument_should_not_require_space_delimiter)
   Args act_cc;
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -228,7 +228,7 @@ TEST(MQ_flag_should_not_be_added_if_run_second_cpp_is_true)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -c -MD foo.c -MF foo.d -o foo.o");
+  ctx.orig_args = Args::from_string("cc -c -MD foo.c -MF foo.d -o foo.o");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string("-MD -MF foo.d");
   Args exp_cc = args_init_from_string("cc -c -MD -MF foo.d");
@@ -237,7 +237,7 @@ TEST(MQ_flag_should_not_be_added_if_run_second_cpp_is_true)
   Args act_cc;
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -247,7 +247,7 @@ TEST(MQ_flag_should_be_added_if_run_second_cpp_is_false)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -c -MD foo.c -MF foo.d -o foo.o");
+  ctx.orig_args = Args::from_string("cc -c -MD foo.c -MF foo.d -o foo.o");
   Args exp_cpp = args_init_from_string("cc -MD -MF foo.d -MQ foo.o");
   Args exp_extra = args_init(0, NULL);
   Args exp_cc = args_init_from_string("cc -c");
@@ -257,7 +257,7 @@ TEST(MQ_flag_should_be_added_if_run_second_cpp_is_false)
   create_file("foo.c", "");
 
   ctx.config.set_run_second_cpp(false);
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -267,7 +267,7 @@ TEST(MF_should_be_added_if_run_second_cpp_is_false)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -c -MD foo.c -o foo.o");
+  ctx.orig_args = Args::from_string("cc -c -MD foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc -MD -MF foo.d -MQ foo.o");
   Args exp_extra = args_init(0, NULL);
   Args exp_cc = args_init_from_string("cc -c");
@@ -278,7 +278,7 @@ TEST(MF_should_be_added_if_run_second_cpp_is_false)
   create_file("foo.c", "");
 
   ctx.config.set_run_second_cpp(false);
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -288,7 +288,7 @@ TEST(MF_should_not_be_added_if_run_second_cpp_is_true)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -c -MD foo.c -o foo.o");
+  ctx.orig_args = Args::from_string("cc -c -MD foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string("-MD");
   Args exp_cc = args_init_from_string("cc -c -MD");
@@ -298,7 +298,7 @@ TEST(MF_should_not_be_added_if_run_second_cpp_is_true)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -308,7 +308,7 @@ TEST(equal_sign_after_MF_should_be_removed)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -c -MF=path foo.c -o foo.o");
+  ctx.orig_args = Args::from_string("cc -c -MF=path foo.c -o foo.o");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string("-MFpath");
   Args exp_cc = args_init_from_string("cc -c -MFpath");
@@ -318,7 +318,7 @@ TEST(equal_sign_after_MF_should_be_removed)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -329,7 +329,6 @@ TEST(sysroot_should_be_rewritten_if_basedir_is_used)
   Context ctx;
 
   char* arg_string;
-  Args orig;
   Args act_cpp;
   Args act_extra;
   Args act_cc;
@@ -338,10 +337,10 @@ TEST(sysroot_should_be_rewritten_if_basedir_is_used)
   ctx.config.set_base_dir(get_root());
   arg_string =
     format("cc --sysroot=%s/foo/bar -c foo.c", ctx.actual_cwd.c_str());
-  orig = args_init_from_string(arg_string);
+  ctx.orig_args = Args::from_string(arg_string);
   free(arg_string);
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_STR_EQ(act_cpp->argv[1], "--sysroot=./foo/bar");
 }
 
@@ -350,7 +349,6 @@ TEST(sysroot_with_separate_argument_should_be_rewritten_if_basedir_is_used)
   Context ctx;
 
   char* arg_string;
-  Args orig;
   Args act_cpp;
   Args act_extra;
   Args act_cc;
@@ -358,10 +356,10 @@ TEST(sysroot_with_separate_argument_should_be_rewritten_if_basedir_is_used)
   create_file("foo.c", "");
   ctx.config.set_base_dir(get_root());
   arg_string = format("cc --sysroot %s/foo -c foo.c", ctx.actual_cwd.c_str());
-  orig = args_init_from_string(arg_string);
+  ctx.orig_args = Args::from_string(arg_string);
   free(arg_string);
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_STR_EQ(act_cpp->argv[1], "--sysroot");
   CHECK_STR_EQ(act_cpp->argv[2], "./foo");
 }
@@ -370,8 +368,8 @@ TEST(MF_flag_with_immediate_argument_should_work_as_last_argument)
 {
   Context ctx;
 
-  Args orig =
-    args_init_from_string("cc -c foo.c -o foo.o -MMD -MT bar -MFfoo.d");
+  ctx.orig_args =
+    Args::from_string("cc -c foo.c -o foo.o -MMD -MT bar -MFfoo.d");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string("-MMD -MT bar -MFfoo.d");
   Args exp_cc = args_init_from_string("cc -c -MMD -MT bar -MFfoo.d");
@@ -381,7 +379,7 @@ TEST(MF_flag_with_immediate_argument_should_work_as_last_argument)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -391,8 +389,8 @@ TEST(MT_flag_with_immediate_argument_should_work_as_last_argument)
 {
   Context ctx;
 
-  Args orig =
-    args_init_from_string("cc -c foo.c -o foo.o -MMD -MFfoo.d -MT foo -MTbar");
+  ctx.orig_args =
+    Args::from_string("cc -c foo.c -o foo.o -MMD -MFfoo.d -MT foo -MTbar");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string("-MMD -MFfoo.d -MT foo -MTbar");
   Args exp_cc = args_init_from_string("cc -c -MMD -MFfoo.d -MT foo -MTbar");
@@ -402,7 +400,7 @@ TEST(MT_flag_with_immediate_argument_should_work_as_last_argument)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -412,8 +410,8 @@ TEST(MQ_flag_with_immediate_argument_should_work_as_last_argument)
 {
   Context ctx;
 
-  Args orig =
-    args_init_from_string("cc -c foo.c -o foo.o -MMD -MFfoo.d -MQ foo -MQbar");
+  ctx.orig_args =
+    Args::from_string("cc -c foo.c -o foo.o -MMD -MFfoo.d -MQ foo -MQbar");
   Args exp_cpp = args_init_from_string("cc");
   Args exp_extra = args_init_from_string("-MMD -MFfoo.d -MQ foo -MQbar");
   Args exp_cc = args_init_from_string("cc -c -MMD -MFfoo.d -MQ foo -MQbar");
@@ -423,7 +421,7 @@ TEST(MQ_flag_with_immediate_argument_should_work_as_last_argument)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -433,7 +431,8 @@ TEST(MQ_flag_without_immediate_argument_should_not_add_MQobj)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQ foo.d foo.c");
+  ctx.orig_args =
+    args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQ foo.d foo.c");
   Args exp_cpp = args_init_from_string("gcc");
   Args exp_extra = args_init_from_string("-MD -MP -MFfoo.d -MQ foo.d");
   Args exp_cc = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQ foo.d");
@@ -443,7 +442,7 @@ TEST(MQ_flag_without_immediate_argument_should_not_add_MQobj)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -453,7 +452,8 @@ TEST(MT_flag_without_immediate_argument_should_not_add_MTobj)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MT foo.d foo.c");
+  ctx.orig_args =
+    args_init_from_string("gcc -c -MD -MP -MFfoo.d -MT foo.d foo.c");
   Args exp_cpp = args_init_from_string("gcc");
   Args exp_extra = args_init_from_string("-MD -MP -MFfoo.d -MT foo.d");
   Args exp_cc = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MT foo.d");
@@ -463,7 +463,7 @@ TEST(MT_flag_without_immediate_argument_should_not_add_MTobj)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -473,7 +473,8 @@ TEST(MQ_flag_with_immediate_argument_should_not_add_MQobj)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQfoo.d foo.c");
+  ctx.orig_args =
+    args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQfoo.d foo.c");
   Args exp_cpp = args_init_from_string("gcc");
   Args exp_extra = args_init_from_string("-MD -MP -MFfoo.d -MQfoo.d");
   Args exp_cc = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQfoo.d");
@@ -483,7 +484,7 @@ TEST(MQ_flag_with_immediate_argument_should_not_add_MQobj)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -493,7 +494,8 @@ TEST(MT_flag_with_immediate_argument_should_not_add_MQobj)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MTfoo.d foo.c");
+  ctx.orig_args =
+    args_init_from_string("gcc -c -MD -MP -MFfoo.d -MTfoo.d foo.c");
   Args exp_cpp = args_init_from_string("gcc");
   Args exp_extra = args_init_from_string("-MD -MP -MFfoo.d -MTfoo.d");
   Args exp_cc = args_init_from_string("gcc -c -MD -MP -MFfoo.d -MTfoo.d");
@@ -503,7 +505,7 @@ TEST(MT_flag_with_immediate_argument_should_not_add_MQobj)
 
   create_file("foo.c", "");
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -514,7 +516,6 @@ TEST(isystem_flag_with_separate_arg_should_be_rewritten_if_basedir_is_used)
   Context ctx;
 
   char* arg_string;
-  Args orig;
   Args act_cpp;
   Args act_extra;
   Args act_cc;
@@ -522,10 +523,10 @@ TEST(isystem_flag_with_separate_arg_should_be_rewritten_if_basedir_is_used)
   create_file("foo.c", "");
   ctx.config.set_base_dir(get_root());
   arg_string = format("cc -isystem %s/foo -c foo.c", ctx.actual_cwd.c_str());
-  orig = args_init_from_string(arg_string);
+  ctx.orig_args = Args::from_string(arg_string);
   free(arg_string);
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_STR_EQ("./foo", act_cpp->argv[2]);
 }
 
@@ -535,7 +536,6 @@ TEST(isystem_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
 
   char* cwd;
   char* arg_string;
-  Args orig;
   Args act_cpp;
   Args act_extra;
   Args act_cc;
@@ -545,10 +545,10 @@ TEST(isystem_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
   // Windows path doesn't work concatenated.
   cwd = get_posix_path(ctx.actual_cwd.c_str());
   arg_string = format("cc -isystem%s/foo -c foo.c", cwd);
-  orig = args_init_from_string(arg_string);
+  ctx.orig_args = Args::from_string(arg_string);
   free(arg_string);
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_STR_EQ("-isystem./foo", act_cpp->argv[1]);
 
   free(cwd);
@@ -560,7 +560,6 @@ TEST(I_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
 
   char* cwd;
   char* arg_string;
-  Args orig;
   Args act_cpp;
   Args act_extra;
   Args act_cc;
@@ -570,10 +569,10 @@ TEST(I_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
   // Windows path doesn't work concatenated.
   cwd = get_posix_path(ctx.actual_cwd.c_str());
   arg_string = format("cc -I%s/foo -c foo.c", cwd);
-  orig = args_init_from_string(arg_string);
+  ctx.orig_args = Args::from_string(arg_string);
   free(arg_string);
 
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_STR_EQ("-I./foo", act_cpp->argv[1]);
 
   free(cwd);
@@ -583,7 +582,7 @@ TEST(debug_flag_order_with_known_option_first)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -g1 -gsplit-dwarf foo.c -c");
+  ctx.orig_args = Args::from_string("cc -g1 -gsplit-dwarf foo.c -c");
   Args exp_cpp = args_init_from_string("cc -g1 -gsplit-dwarf");
   Args exp_extra = args_init(0, NULL);
   Args exp_cc = args_init_from_string("cc -g1 -gsplit-dwarf -c");
@@ -592,7 +591,7 @@ TEST(debug_flag_order_with_known_option_first)
   Args act_cc;
 
   create_file("foo.c", "");
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -602,7 +601,7 @@ TEST(debug_flag_order_with_known_option_last)
 {
   Context ctx;
 
-  Args orig = args_init_from_string("cc -gsplit-dwarf -g1 foo.c -c");
+  ctx.orig_args = Args::from_string("cc -gsplit-dwarf -g1 foo.c -c");
   Args exp_cpp = args_init_from_string("cc -gsplit-dwarf -g1");
   Args exp_extra = args_init(0, NULL);
   Args exp_cc = args_init_from_string("cc -gsplit-dwarf -g1 -c");
@@ -611,7 +610,7 @@ TEST(debug_flag_order_with_known_option_last)
   Args act_cc;
 
   create_file("foo.c", "");
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
@@ -621,7 +620,7 @@ TEST(options_not_to_be_passed_to_the_preprocesor)
 {
   Context ctx;
 
-  Args orig = args_init_from_string(
+  ctx.orig_args = Args::from_string(
     "cc -Wa,foo foo.c -g -c -DX -Werror -Xlinker fie -Xlinker,fum -Wno-error");
   Args exp_cpp = args_init_from_string("cc -g -DX");
   Args exp_extra = args_init_from_string(
@@ -633,7 +632,7 @@ TEST(options_not_to_be_passed_to_the_preprocesor)
   Args act_cc;
 
   create_file("foo.c", "");
-  CHECK(!process_args(ctx, orig, act_cpp, act_extra, act_cc));
+  CHECK(!process_args(ctx, act_cpp, act_extra, act_cc));
   CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
   CHECK_ARGS_EQ_FREE12(exp_extra, act_extra);
   CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);