diff options
-rw-r--r-- | gcc/java/ChangeLog | 29 | ||||
-rw-r--r-- | gcc/java/jcf-io.c | 10 | ||||
-rw-r--r-- | gcc/java/lang-specs.h | 4 | ||||
-rw-r--r-- | gcc/java/parse.h | 7 | ||||
-rw-r--r-- | gcc/java/parse.y | 17 |
5 files changed, 49 insertions, 18 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index fd94fb7..6a138b7 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,29 @@ +2001-07-10 Alexandre Petit-Bianco <apbianco@redhat.com> + + * lang-specs.h: Forbit the use if `-femit-class-file{s}' without + `-fsyntax-only.' Fixes PR java/3248 + +2001-07-10 Alexandre Petit-Bianco <apbianco@redhat.com> + + * jcf-io.c (find_class): Clarified error message. Fixes PR java/2603 + +2001-07-10 Alexandre Petit-Bianco <apbianco@redhat.com> + + * parse.h (INNER_ENCLOSING_SCOPE_CHECK): No `this' is fine if the + current function is static. Fixes PR java/1970 + +2001-07-09 Alexandre Petit-Bianco <apbianco@redhat.com> + + * parse.y (patch_method_invocation): Add enclosing context to ctor + calls if necessary. Fixes PR java/2953 + +2001-07-09 Alexandre Petit-Bianco <apbianco@redhat.com> + + * parse.y (resolve_package): Abort if qualified expression member + isn't right. + (qualify_ambiguous_name): Don't qualify as type if `this' in use. + Fixes PR java/1391 + 2001-07-07 Zack Weinberg <zackw@stanford.edu> * verify.c: Don't use // comments. @@ -31,8 +57,7 @@ 2001-07-03 Alexandre Petit-Bianco <apbianco@redhat.com> * parse.y (resolve_expression_name): Improved error message for - inner class cases. - Fixes PR java/1958 + inner class cases. Fixes PR java/1958 2001-06-28 Gabriel Dos Reis <gdr@codesourcery.com> diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c index f254438..f8a0f59 100644 --- a/gcc/java/jcf-io.c +++ b/gcc/java/jcf-io.c @@ -405,16 +405,8 @@ DEFUN(find_class, (classname, classname_length, jcf, source_ok), up no matter what. FIXME. */ if (! java && ! class && java_buf.st_mtime > class_buf.st_mtime) { - char *stripped_class_name = xstrdup (classname); - int i = strlen (stripped_class_name); - - while (stripped_class_name [i] != '.') - i--; - - stripped_class_name [i] = '\0'; 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); + warning ("Source file for class `%s' is newer than its matching class file. Source file `%s' used instead", classname, java_buffer); class = -1; } diff --git a/gcc/java/lang-specs.h b/gcc/java/lang-specs.h index fa139aa..3aaed8c 100644 --- a/gcc/java/lang-specs.h +++ b/gcc/java/lang-specs.h @@ -1,5 +1,5 @@ /* Definitions for specs for the GNU compiler for the Java(TM) language. - Copyright (C) 1996, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. @@ -32,6 +32,8 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ {"@java", "%{fjni:%{femit-class-files:%e-fjni and -femit-class-files are incompatible}}\ %{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}}\ + %{femit-class-file:%{!fsyntax-only:%e-femit-class-file should used along with -fsyntax-only}}\ + %{femit-class-files:%{!fsyntax-only:%e-femit-class-file should used along with -fsyntax-only}}\ %{!E:jc1 %i %(jc1) %(cc1_options) %{+e*} %{I*}\ %{MD} %{MMD} %{M} %{MM} %{MA} %{MT*} %{MF*}\ %{!fsyntax-only:%(invoke_as)}}", 0}, diff --git a/gcc/java/parse.h b/gcc/java/parse.h index c11e70d..798d139 100644 --- a/gcc/java/parse.h +++ b/gcc/java/parse.h @@ -844,8 +844,11 @@ struct parser_ctxt { (TREE_TYPE (DECL_CONTEXT \ (TYPE_NAME (TREE_TYPE (TREE_TYPE (current_this))))),\ TREE_TYPE (DECL_CONTEXT (TYPE_NAME (T))))) \ - /* We don't have a this. */ \ - || !current_this)) + /* We don't have a this, which is OK if the current function is \ + static. */ \ + || (!current_this \ + && current_function_decl \ + && ! METHOD_STATIC (current_function_decl)))) /* Push macro. First argument to PUSH_CPC is a DECL_TYPE, second argument is the unqualified currently parsed class name. */ diff --git a/gcc/java/parse.y b/gcc/java/parse.y index e4e682b..8c18069 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -6818,6 +6818,10 @@ resolve_package (pkg, next) for (acc = NULL_TREE, current = EXPR_WFL_QUALIFICATION (pkg); current; current = TREE_CHAIN (current)) { + /* If we don't have what we're expecting, exit now. TYPE_NAME + will be null and the error caught later. */ + if (TREE_CODE (QUAL_WFL (current)) != EXPR_WITH_FILE_LOCATION) + break; acc = merge_qualified_name (acc, EXPR_WFL_NODE (QUAL_WFL (current))); if ((type_name = resolve_no_layout (acc, NULL_TREE))) { @@ -10120,7 +10124,9 @@ patch_method_invocation (patch, primary, where, from_super, to have an enclosing context passed as a second parameter (the constructor is one of an inner class. We extract it from the current function. */ - if (is_super_init && PURE_INNER_CLASS_TYPE_P (DECL_CONTEXT (list))) + if ((is_super_init || + (TREE_CODE (patch) == CALL_EXPR && name == this_identifier_node)) + && PURE_INNER_CLASS_TYPE_P (DECL_CONTEXT (list))) { tree enclosing_decl = DECL_CONTEXT (TYPE_NAME (current_class)); tree extra_arg; @@ -10986,9 +10992,12 @@ qualify_ambiguous_name (id) of the compilation unit containing NAME, - NAME is declared by exactly on type-import-on-demand declaration of the compilation unit containing NAME. - - NAME is actually a STRING_CST. */ - else if (TREE_CODE (name) == STRING_CST || TREE_CODE (name) == INTEGER_CST - || (decl = resolve_and_layout (name, NULL_TREE))) + - NAME is actually a STRING_CST. + This can't happen if the expression was qualified by `this.' */ + else if (! this_found && + (TREE_CODE (name) == STRING_CST || + TREE_CODE (name) == INTEGER_CST || + (decl = resolve_and_layout (name, NULL_TREE)))) { RESOLVE_TYPE_NAME_P (qual_wfl) = 1; QUAL_RESOLUTION (qual) = decl; |