]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Test extra_args_to_hash output of cc_process_args
authorJoel Rosdahl <joel@rosdahl.net>
Thu, 16 Jan 2020 20:03:08 +0000 (21:03 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 16 Jan 2020 20:03:08 +0000 (21:03 +0100)
src/ccache.cpp
unittest/test_argument_processing.cpp

index 480893b30951a409173fd2fbfdca2202ce94d4fc..f2dae5b2ad9018467007088963353bdfc2450b80 100644 (file)
@@ -3497,9 +3497,7 @@ cc_process_args(struct args* args,
   *preprocessor_args = args_copy(common_args);
   args_extend(*preprocessor_args, cpp_args);
 
-  if (extra_args_to_hash) {
-    *extra_args_to_hash = compiler_only_args;
-  }
+  *extra_args_to_hash = compiler_only_args;
 
 out:
   args_free(expanded_args);
index 59d5ec4ad8068a0df9bc8a5436cdaccf866b931b..1efa8d6d55b8ed8f00cea3003cc6da70202500ed 100644 (file)
@@ -93,13 +93,17 @@ TEST(dependency_flags_should_only_be_sent_to_the_preprocessor)
   " -Wp,-MD,wpmd -Wp,-MMD,wpmmd -Wp,-MP -Wp,-MT,wpmt -Wp,-MQ,wpmq -Wp,-MF,wpf"
   struct args* orig = args_init_from_string(CMD " -c foo.c -o foo.o");
   struct args* exp_cpp = args_init_from_string(CMD);
+  struct args* exp_extra = args_init(0, NULL);
 #undef CMD
   struct args* exp_cc = args_init_from_string("cc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -117,14 +121,18 @@ TEST(cpp_only_flags_to_preprocessor_if_run_second_cpp_is_false)
   " -Wp,-MQ,wpmq -Wp,-MF,wpf"
   struct args* orig = args_init_from_string(CMD " -c foo.c -o foo.o");
   struct args* exp_cpp = args_init_from_string(CMD);
+  struct args* exp_extra = args_init(0, NULL);
 #undef CMD
   struct args* exp_cc = args_init_from_string("cc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
   create_file("foo.c", "");
 
   g_config.set_run_second_cpp(false);
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -143,14 +151,18 @@ TEST(cpp_only_flags_to_preprocessor_and_compiler_if_run_second_cpp_is_true)
   " -MQ mq1 -MQ mq2 -Wp,-MD,wpmd -Wp,-MMD,wpmmd"
   struct args* orig = args_init_from_string(CMD DEP_OPTS " -c foo.c -o foo.o");
   struct args* exp_cpp = args_init_from_string(CMD DEP_OPTS);
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string(CMD " -c");
 #undef CMD
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
   create_file("foo.c", "");
 
   g_config.set_run_second_cpp(true);
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -162,12 +174,16 @@ TEST(dependency_flags_that_take_an_argument_should_not_require_space_delimiter)
     "cc -c -MMD -MFfoo.d -MT mt -MTmt -MQmq foo.c -o foo.o");
   struct args* exp_cpp =
     args_init_from_string("cc -MMD -MFfoo.d -MT mt -MTmt -MQmq");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("cc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -177,12 +193,17 @@ TEST(equal_sign_after_MF_should_be_removed)
 {
   struct args* orig = args_init_from_string("cc -c -MF=path foo.c -o foo.o");
   struct args* exp_cpp = args_init_from_string("cc -MFpath");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("cc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -193,7 +214,9 @@ TEST(sysroot_should_be_rewritten_if_basedir_is_used)
   extern char* current_working_dir;
   char* arg_string;
   struct args* orig;
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
 
   create_file("foo.c", "");
   g_config.set_base_dir(get_root());
@@ -202,7 +225,7 @@ TEST(sysroot_should_be_rewritten_if_basedir_is_used)
   orig = args_init_from_string(arg_string);
   free(arg_string);
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &act_cpp, &act_extra, &act_cc));
   CHECK_STR_EQ(act_cpp->argv[1], "--sysroot=./foo/bar");
 
   args_free(orig);
@@ -215,7 +238,9 @@ TEST(sysroot_with_separate_argument_should_be_rewritten_if_basedir_is_used)
   extern char* current_working_dir;
   char* arg_string;
   struct args* orig;
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
 
   create_file("foo.c", "");
   g_config.set_base_dir(get_root());
@@ -224,7 +249,7 @@ TEST(sysroot_with_separate_argument_should_be_rewritten_if_basedir_is_used)
   orig = args_init_from_string(arg_string);
   free(arg_string);
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &act_cpp, &act_extra, &act_cc));
   CHECK_STR_EQ(act_cpp->argv[1], "--sysroot");
   CHECK_STR_EQ(act_cpp->argv[2], "./foo");
 
@@ -238,12 +263,17 @@ TEST(MF_flag_with_immediate_argument_should_work_as_last_argument)
   struct args* orig =
     args_init_from_string("cc -c foo.c -o foo.o -MMD -MT bar -MFfoo.d");
   struct args* exp_cpp = args_init_from_string("cc -MMD -MT bar -MFfoo.d");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("cc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -255,12 +285,17 @@ TEST(MT_flag_with_immediate_argument_should_work_as_last_argument)
     args_init_from_string("cc -c foo.c -o foo.o -MMD -MFfoo.d -MT foo -MTbar");
   struct args* exp_cpp =
     args_init_from_string("cc -MMD -MFfoo.d -MT foo -MTbar");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("cc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -272,12 +307,17 @@ TEST(MQ_flag_with_immediate_argument_should_work_as_last_argument)
     args_init_from_string("cc -c foo.c -o foo.o -MMD -MFfoo.d -MQ foo -MQbar");
   struct args* exp_cpp =
     args_init_from_string("cc -MMD -MFfoo.d -MQ foo -MQbar");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("cc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -289,12 +329,17 @@ TEST(MQ_flag_without_immediate_argument_should_not_add_MQobj)
     args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQ foo.d foo.c");
   struct args* exp_cpp =
     args_init_from_string("gcc -MD -MP -MFfoo.d -MQ foo.d");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("gcc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -306,12 +351,17 @@ TEST(MT_flag_without_immediate_argument_should_not_add_MTobj)
     args_init_from_string("gcc -c -MD -MP -MFfoo.d -MT foo.d foo.c");
   struct args* exp_cpp =
     args_init_from_string("gcc -MD -MP -MFfoo.d -MT foo.d");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("gcc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -322,12 +372,17 @@ TEST(MQ_flag_with_immediate_argument_should_not_add_MQobj)
   struct args* orig =
     args_init_from_string("gcc -c -MD -MP -MFfoo.d -MQfoo.d foo.c");
   struct args* exp_cpp = args_init_from_string("gcc -MD -MP -MFfoo.d -MQfoo.d");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("gcc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -338,12 +393,17 @@ TEST(MT_flag_with_immediate_argument_should_not_add_MQobj)
   struct args* orig =
     args_init_from_string("gcc -c -MD -MP -MFfoo.d -MTfoo.d foo.c");
   struct args* exp_cpp = args_init_from_string("gcc -MD -MP -MFfoo.d -MTfoo.d");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("gcc -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -354,8 +414,12 @@ TEST(fprofile_flag_with_existing_dir_should_be_rewritten_to_real_path)
   struct args* orig =
     args_init_from_string("gcc -c -fprofile-generate=some/dir foo.c");
   struct args* exp_cpp = args_init_from_string("gcc");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("gcc");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
+
   char *s, *path;
 
   create_file("foo.c", "");
@@ -369,8 +433,9 @@ TEST(fprofile_flag_with_existing_dir_should_be_rewritten_to_real_path)
   args_add(exp_cc, "-c");
   free(s);
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -382,14 +447,18 @@ TEST(fprofile_flag_with_nonexistent_dir_should_not_be_rewritten)
     args_init_from_string("gcc -c -fprofile-generate=some/dir foo.c");
   struct args* exp_cpp =
     args_init_from_string("gcc -fprofile-generate=some/dir");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc =
     args_init_from_string("gcc -fprofile-generate=some/dir -c");
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
 
   create_file("foo.c", "");
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -400,7 +469,9 @@ TEST(isystem_flag_with_separate_arg_should_be_rewritten_if_basedir_is_used)
   extern char* current_working_dir;
   char* arg_string;
   struct args* orig;
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
 
   create_file("foo.c", "");
   g_config.set_base_dir(get_root());
@@ -409,7 +480,7 @@ TEST(isystem_flag_with_separate_arg_should_be_rewritten_if_basedir_is_used)
   orig = args_init_from_string(arg_string);
   free(arg_string);
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &act_cpp, &act_extra, &act_cc));
   CHECK_STR_EQ("./foo", act_cpp->argv[2]);
 
   args_free(orig);
@@ -423,7 +494,9 @@ TEST(isystem_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
   char* cwd;
   char* arg_string;
   struct args* orig;
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
 
   create_file("foo.c", "");
   g_config.set_base_dir("/"); // posix
@@ -434,7 +507,7 @@ TEST(isystem_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
   orig = args_init_from_string(arg_string);
   free(arg_string);
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &act_cpp, &act_extra, &act_cc));
   CHECK_STR_EQ("-isystem./foo", act_cpp->argv[1]);
 
   free(cwd);
@@ -449,7 +522,9 @@ TEST(I_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
   char* cwd;
   char* arg_string;
   struct args* orig;
-  struct args *act_cpp = NULL, *act_cc = NULL;
+  struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
+  struct args* act_cc = NULL;
 
   create_file("foo.c", "");
   g_config.set_base_dir(x_strdup("/")); // posix
@@ -460,7 +535,7 @@ TEST(I_flag_with_concat_arg_should_be_rewritten_if_basedir_is_used)
   orig = args_init_from_string(arg_string);
   free(arg_string);
 
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &act_cpp, &act_extra, &act_cc));
   CHECK_STR_EQ("-I./foo", act_cpp->argv[1]);
 
   free(cwd);
@@ -473,13 +548,16 @@ TEST(debug_flag_order_with_known_option_first)
 {
   struct args* orig = args_init_from_string("cc -g1 -gsplit-dwarf foo.c -c");
   struct args* exp_cpp = args_init_from_string("cc -g1 -gsplit-dwarf");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("cc -g1 -gsplit-dwarf -c");
   struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
   struct args* act_cc = NULL;
 
   create_file("foo.c", "");
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);
@@ -489,13 +567,16 @@ TEST(debug_flag_order_with_known_option_last)
 {
   struct args* orig = args_init_from_string("cc -gsplit-dwarf -g1 foo.c -c");
   struct args* exp_cpp = args_init_from_string("cc -gsplit-dwarf -g1");
+  struct args* exp_extra = args_init(0, NULL);
   struct args* exp_cc = args_init_from_string("cc -gsplit-dwarf -g1 -c");
   struct args* act_cpp = NULL;
+  struct args* act_extra = NULL;
   struct args* act_cc = NULL;
 
   create_file("foo.c", "");
-  CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+  CHECK(cc_process_args(orig, &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);
 
   args_free(orig);