From: Joel Rosdahl Date: Thu, 16 Jan 2020 20:03:08 +0000 (+0100) Subject: Test extra_args_to_hash output of cc_process_args X-Git-Tag: v4.0~677 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=810a194e30c229a77ccbea004ee5e7498a19f932;p=thirdparty%2Fccache.git Test extra_args_to_hash output of cc_process_args --- diff --git a/src/ccache.cpp b/src/ccache.cpp index 480893b30..f2dae5b2a 100644 --- a/src/ccache.cpp +++ b/src/ccache.cpp @@ -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); diff --git a/unittest/test_argument_processing.cpp b/unittest/test_argument_processing.cpp index 59d5ec4ad..1efa8d6d5 100644 --- a/unittest/test_argument_processing.cpp +++ b/unittest/test_argument_processing.cpp @@ -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);