summaryrefslogtreecommitdiff
path: root/gcc/java/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/java/parse.y')
-rw-r--r--gcc/java/parse.y18
1 files changed, 13 insertions, 5 deletions
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 8abd4a7c079..4a4b3245375 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -7228,6 +7228,11 @@ patch_invoke (patch, method, args)
if (JPRIMITIVE_TYPE_P (TREE_TYPE (TREE_VALUE (ta))) &&
TREE_TYPE (TREE_VALUE (ta)) != TREE_VALUE (t))
TREE_VALUE (ta) = convert (TREE_VALUE (t), TREE_VALUE (ta));
+
+ /* Resolve unresolved returned type isses */
+ t = TREE_TYPE (TREE_TYPE (method));
+ if (TREE_CODE (t) == POINTER_TYPE && !CLASS_LOADED_P (TREE_TYPE (t)))
+ resolve_and_layout (TREE_TYPE (t), NULL);
if (flag_emit_class_files || flag_emit_xref)
func = method;
@@ -7638,7 +7643,7 @@ qualify_ambiguous_name (id)
break;
case NEW_ARRAY_EXPR:
qual = TREE_CHAIN (qual);
- new_array_found = 1;
+ again = new_array_found = 1;
continue;
case NEW_CLASS_EXPR:
case CONVERT_EXPR:
@@ -7716,7 +7721,8 @@ qualify_ambiguous_name (id)
declaration or parameter declaration, then it is an expression
name. We don't carry this test out if we're in the context of the
use of SUPER or THIS */
- if (!this_found && !super_found && (decl = IDENTIFIER_LOCAL_VALUE (name)))
+ if (!this_found && !super_found &&
+ TREE_CODE (name) != STRING_CST && (decl = IDENTIFIER_LOCAL_VALUE (name)))
{
RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1;
QUAL_RESOLUTION (qual) = decl;
@@ -7733,15 +7739,17 @@ qualify_ambiguous_name (id)
QUAL_RESOLUTION (qual) = (new_array_found ? NULL_TREE : decl);
}
- /* We reclassify NAME as a type name if:
+ /* We reclassify NAME as yielding to a type name resolution if:
- NAME is a class/interface declared within the compilation
unit containing NAME,
- NAME is imported via a single-type-import declaration,
- NAME is declared in an another compilation unit of the package
of the compilation unit containing NAME,
- NAME is declared by exactly on type-import-on-demand declaration
- of the compilation unit containing NAME. */
- else if ((decl = resolve_and_layout (name, NULL_TREE)))
+ of the compilation unit containing NAME.
+ - NAME is actually a STRING_CST. */
+ else if (TREE_CODE (name) == STRING_CST ||
+ (decl = resolve_and_layout (name, NULL_TREE)))
{
RESOLVE_TYPE_NAME_P (qual_wfl) = 1;
QUAL_RESOLUTION (qual) = decl;