From b7436b7288b074c505c7efd6be8740dfab471995 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 4 Nov 2000 04:57:33 +0000 Subject: [PATCH] lang-options.h: Mention -Wout-of-date. * lang-options.h: Mention -Wout-of-date. * jcf-dump.c (flag_newer): New global. * gjavah.c (flag_newer): New global. * jcf-io.c (find_class): Only warn when flag_newer set. * lang.c (flag_newer): New global. (struct string_option): New declaration. (lang_W_options): New global. (process_option_with_no): New function. (lang_decode_option): Use it. From-SVN: r37244 --- gcc/java/ChangeLog | 10 +++++ gcc/java/gjavah.c | 4 ++ gcc/java/java-tree.h | 4 ++ gcc/java/jcf-dump.c | 4 ++ gcc/java/jcf-io.c | 3 +- gcc/java/lang-options.h | 1 + gcc/java/lang.c | 96 +++++++++++++++++++++++++---------------- 7 files changed, 84 insertions(+), 38 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 3aeede4d23e..6528d40cbf5 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,5 +1,15 @@ 2000-11-03 Tom Tromey + * lang-options.h: Mention -Wout-of-date. + * jcf-dump.c (flag_newer): New global. + * gjavah.c (flag_newer): New global. + * jcf-io.c (find_class): Only warn when flag_newer set. + * lang.c (flag_newer): New global. + (struct string_option): New declaration. + (lang_W_options): New global. + (process_option_with_no): New function. + (lang_decode_option): Use it. + * class.c (cxx_keyword_p): Accept keywords with trailing `$'s. * gjavah.c (cxx_keyword_subst): Handle any number of trailing `$'. diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c index f49b717c199..6e6075ea0ff 100644 --- a/gcc/java/gjavah.c +++ b/gcc/java/gjavah.c @@ -47,6 +47,10 @@ static int found_error = 0; /* Nonzero if we're generating JNI output. */ static int flag_jni = 0; +/* When non zero, warn when source file is newer than matching class + file. */ +int flag_newer = 1; + /* Directory to place resulting files in. Set by -d option. */ const char *output_directory = ""; diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index 8196ea64961..27533670b9e 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -162,6 +162,10 @@ extern int flag_redundant; extern int flag_not_overriding; extern int flag_static_local_jdk1_1; +/* When non zero, warn when source file is newer than matching class + file. */ +extern int flag_newer; + /* When non zero, call a library routine to do integer divisions. */ extern int flag_use_divide_subroutine; diff --git a/gcc/java/jcf-dump.c b/gcc/java/jcf-dump.c index 88b188befb1..1becf16e33e 100644 --- a/gcc/java/jcf-dump.c +++ b/gcc/java/jcf-dump.c @@ -71,6 +71,10 @@ int flag_print_fields = 1; int flag_print_methods = 1; int flag_print_attributes = 1; +/* When non zero, warn when source file is newer than matching class + file. */ +int flag_newer = 1; + /* Print names of classes that have a "main" method. */ int flag_print_main = 0; diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c index 7bd4fe81afa..db192082881 100644 --- a/gcc/java/jcf-io.c +++ b/gcc/java/jcf-io.c @@ -403,7 +403,8 @@ DEFUN(find_class, (classname, classname_length, jcf, source_ok), i--; stripped_class_name [i] = '\0'; - warning ("Source file for class `%s' is newer than its matching class file. Source file used instead", stripped_class_name); + if (flag_newer) + warning ("Source file for class `%s' is newer than its matching class file. Source file used instead", stripped_class_name); free (stripped_class_name); class = -1; } diff --git a/gcc/java/lang-options.h b/gcc/java/lang-options.h index 3d4ec6da416..25a501573d0 100644 --- a/gcc/java/lang-options.h +++ b/gcc/java/lang-options.h @@ -57,3 +57,4 @@ DEFINE_LANG_NAME ("Java") "Warn if modifiers are specified when not necessary"}, { "-Wunsupported-jdk11", "Warn if `final' local variables are specified"}, { "-Wextraneous-semicolon", "Warn if deprecated empty statements are found"}, + { "-Wout-of-date", "Warn if .class files are out of date" }, diff --git a/gcc/java/lang.c b/gcc/java/lang.c index 8065fc767fe..b90abdb461e 100644 --- a/gcc/java/lang.c +++ b/gcc/java/lang.c @@ -37,10 +37,20 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ #include "xref.h" #include "ggc.h" +struct string_option +{ + const char *string; + int *variable; + int on_value; +}; + static void put_decl_string PARAMS ((const char *, int)); static void put_decl_node PARAMS ((tree)); static void java_dummy_print PARAMS ((const char *)); static void lang_print_error PARAMS ((const char *)); +static int process_option_with_no PARAMS ((char *, + struct string_option *, + int)); #ifndef OBJECT_SUFFIX # define OBJECT_SUFFIX ".o" @@ -122,6 +132,10 @@ int flag_hash_synchronization; JNI, not CNI. */ int flag_jni = 0; +/* When non zero, warn when source file is newer than matching class + file. */ +int flag_newer = 1; + /* The encoding of the source file. */ const char *current_encoding = NULL; @@ -139,7 +153,7 @@ extern int flag_exceptions; if `-fSTRING' is seen as an option. (If `-fno-STRING' is seen as an option, the opposite value is stored.) */ -static struct { const char *string; int *variable; int on_value;} +static struct string_option lang_f_options[] = { {"emit-class-file", &flag_emit_class_files, 1}, @@ -150,6 +164,15 @@ lang_f_options[] = {"jni", &flag_jni, 1} }; +static struct string_option +lang_W_options[] = +{ + { "unsupported-jdk11", &flag_static_local_jdk1_1, 1 }, + { "redundant-modifiers", &flag_redundant, 1 }, + { "extraneous-semicolon", &flag_extraneous_semicolon, 1 }, + { "out-of-date", &flag_newer, 1 } +}; + JCF *current_jcf; /* Variable controlling how dependency tracking is enabled in @@ -162,6 +185,34 @@ static int dependency_tracking = 0; #define DEPEND_TARGET_SET 4 #define DEPEND_FILE_ALREADY_SET 8 +/* Process an option that can accept a `no-' form. + Return 1 if option found, 0 otherwise. */ +static int +process_option_with_no (p, table, table_size) + char *p; + struct string_option *table; + int table_size; +{ + int j; + + for (j = 0; j < table_size; j++) + { + if (!strcmp (p, table[j].string)) + { + *table[j].variable = table[j].on_value; + return 1; + } + if (p[0] == 'n' && p[1] == 'o' && p[2] == '-' + && ! strcmp (p+3, table[j].string)) + { + *table[j].variable = ! table[j].on_value; + return 1; + } + } + + return 0; +} + /* * process java-specific compiler command-line options * return 0, but do not complain if the option is not recognised. @@ -241,28 +292,9 @@ lang_decode_option (argc, argv) /* Some kind of -f option. P's value is the option sans `-f'. Search for it in the table of options. */ - int found = 0, j; - p += 2; - - for (j = 0; !found && j < (int) ARRAY_SIZE (lang_f_options); j++) - { - if (!strcmp (p, lang_f_options[j].string)) - { - *lang_f_options[j].variable = lang_f_options[j].on_value; - /* A goto here would be cleaner, - but breaks the vax pcc. */ - found = 1; - } - if (p[0] == 'n' && p[1] == 'o' && p[2] == '-' - && ! strcmp (p+3, lang_f_options[j].string)) - { - *lang_f_options[j].variable = ! lang_f_options[j].on_value; - found = 1; - } - } - - return found; + return process_option_with_no (p, lang_f_options, + ARRAY_SIZE (lang_f_options)); } if (strcmp (p, "-Wall") == 0) @@ -276,22 +308,12 @@ lang_decode_option (argc, argv) return 1; } - if (strcmp (p, "-Wunsupported-jdk11") == 0) + if (p[0] == '-' && p[1] == 'W') { - flag_static_local_jdk1_1 = 1; - return 1; - } - - if (strcmp (p, "-Wredundant-modifiers") == 0) - { - flag_redundant = 1; - return 1; - } - - if (strcmp (p, "-Wextraneous-semicolon") == 0) - { - flag_extraneous_semicolon = 1; - return 1; + /* Skip `-W' and see if we accept the option or its `no-' form. */ + p += 2; + return process_option_with_no (p, lang_W_options, + ARRAY_SIZE (lang_W_options)); } if (strcmp (p, "-MD") == 0)