]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Correct "-MJ" bail out, identify both "-MJ file" and "-MJfile" (#486)
authorThomas Otto <thomas.otto@pdv-fs.de>
Sun, 10 Nov 2019 20:32:59 +0000 (21:32 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Sun, 10 Nov 2019 20:32:59 +0000 (21:32 +0100)
Also added test to detect the invalid case TOO_HARD | TAKES_CONCAT_ARG.

src/ccache.c
src/compopt.c
unittest/test_compopt.c

index 2ad1ed542946cd5d58027f75a134f48b44da17d4..8bdf2a1ddfe817222a8d9d15489a27e439b6c73e 100644 (file)
@@ -2649,7 +2649,9 @@ cc_process_args(struct args *args,
                }
 
                // These are always too hard.
-               if (compopt_too_hard(argv[i]) || str_startswith(argv[i], "-fdump-")) {
+               if (compopt_too_hard(argv[i])
+                   || str_startswith(argv[i], "-fdump-")
+                   || str_startswith(argv[i], "-MJ")) {
                        cc_log("Compiler option %s is unsupported", argv[i]);
                        stats_update(STATS_UNSUPPORTED_OPTION);
                        result = false;
index 6b46cbed623c8d7ea30ee3e33c34284f1d90c5ec..9b42fd1b5178d3406acdad09c68218a10e79cb1c 100644 (file)
@@ -65,7 +65,6 @@ static const struct compopt compopts[] = {
        {"-L",              TAKES_ARG},
        {"-M",              TOO_HARD},
        {"-MF",             TAKES_ARG},
-       {"-MJ",             TAKES_ARG | TOO_HARD},
        {"-MM",             TOO_HARD},
        {"-MQ",             TAKES_ARG},
        {"-MT",             TAKES_ARG},
@@ -175,16 +174,27 @@ compopt_short(bool (*fn)(const char *), const char *option)
 }
 
 // Used by unittest/test_compopt.c.
-bool compopt_verify_sortedness(void);
+bool compopt_verify_sortedness_and_flags(void);
 
 // For test purposes.
 bool
-compopt_verify_sortedness(void)
+compopt_verify_sortedness_and_flags(void)
 {
-       for (size_t i = 1; i < ARRAY_SIZE(compopts); i++) {
+       for (size_t i = 0; i < ARRAY_SIZE(compopts); i++) {
+               if (compopts[i].type & TOO_HARD && compopts[i].type & TAKES_CONCAT_ARG) {
+                       fprintf(stderr,
+                               "type (TOO_HARD | TAKES_CONCAT_ARG) not allowed, used by %s\n",
+                               compopts[i].name);
+                       return false;
+               }
+
+               if (i == 0) {
+                       continue;
+               }
+
                if (strcmp(compopts[i-1].name, compopts[i].name) >= 0) {
                        fprintf(stderr,
-                               "compopt_verify_sortedness: %s >= %s\n",
+                               "compopt_verify_sortedness_and_flags: %s >= %s\n",
                                compopts[i-1].name,
                                compopts[i].name);
                        return false;
index c9ae789b5b6b434d3a31251443644f4532e7fb3b..eed3562e68f777e77bb11766138874834f7064fa 100644 (file)
@@ -24,8 +24,8 @@ TEST_SUITE(compopt)
 
 TEST(option_table_should_be_sorted)
 {
-       bool compopt_verify_sortedness(void);
-       CHECK(compopt_verify_sortedness());
+       bool compopt_verify_sortedness_and_flags(void);
+       CHECK(compopt_verify_sortedness_and_flags());
 }
 
 TEST(dash_I_affects_cpp)