summaryrefslogtreecommitdiffstats
path: root/gcc/java
diff options
context:
space:
mode:
authorapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-11 07:33:43 +0000
committerapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-11 07:33:43 +0000
commit43aae69417da2f3302e53644e37526fbebaa85d6 (patch)
tree0a8efa7d178e22f6ccfca66a5e9ef32573adf206 /gcc/java
parentb729e95f27b9163712c3fe2f4c64ebc16fce99e8 (diff)
downloadppe42-gcc-43aae69417da2f3302e53644e37526fbebaa85d6.tar.gz
ppe42-gcc-43aae69417da2f3302e53644e37526fbebaa85d6.zip
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 (http://gcc.gnu.org/ml/gcc-patches/2001-07/msg00701.html ) git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43927 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog29
-rw-r--r--gcc/java/jcf-io.c10
-rw-r--r--gcc/java/lang-specs.h4
-rw-r--r--gcc/java/parse.h7
-rw-r--r--gcc/java/parse.y17
5 files changed, 49 insertions, 18 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index fd94fb746e1..6a138b7e0b7 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 f2544380506..f8a0f591db9 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 fa139aa24ec..3aaed8c103f 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 c11e70d9295..798d1391770 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 e4e682b453b..8c1806991de 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;
OpenPOWER on IntegriCloud