re PR c++/11468 (Deriving from CNI class java::lang::Object causing an ICE)

PR c++/11468
	* init.c (build_new_1): Handle error_mark_nodes returned by
	build_java_class_ref.
	(build_java_class_ref): Do not abort compilation, but return
	error_mark_node.  Improve error message.  Fix indentation.

	* g++.dg/other/java2.C: New test.

From-SVN: r114937
This commit is contained in:
Volker Reichelt 2006-06-23 15:59:51 +00:00 committed by Volker Reichelt
parent 6de5f432f1
commit a3d536f1c1
4 changed files with 36 additions and 4 deletions

View file

@ -1,3 +1,11 @@
2006-06-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/11468
* init.c (build_new_1): Handle error_mark_nodes returned by
build_java_class_ref.
(build_java_class_ref): Do not abort compilation, but return
error_mark_node. Improve error message. Fix indentation.
2006-06-23 Danny Smith <dannysmith@users.sourceforge.net>
PR target/27789

View file

@ -1696,6 +1696,9 @@ build_new_1 (tree placement, tree type, tree nelts, tree init,
tree class_decl = build_java_class_ref (elt_type);
static const char alloc_name[] = "_Jv_AllocObject";
if (class_decl == error_mark_node)
return error_mark_node;
use_java_new = 1;
if (!get_global_value_if_present (get_identifier (alloc_name),
&alloc_fn))
@ -2148,8 +2151,10 @@ build_java_class_ref (tree type)
{
jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
if (jclass_node == NULL_TREE)
fatal_error ("call to Java constructor, while %<jclass%> undefined");
{
error ("call to Java constructor, while %<jclass%> undefined");
return error_mark_node;
}
jclass_node = TREE_TYPE (jclass_node);
}
@ -2164,8 +2169,11 @@ build_java_class_ref (tree type)
break;
}
if (!field)
internal_error ("can't find class$");
}
{
error ("can't find %<class$%> in %qT", type);
return error_mark_node;
}
}
class_decl = IDENTIFIER_GLOBAL_VALUE (name);
if (class_decl == NULL_TREE)

View file

@ -1,3 +1,8 @@
2006-06-23 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/11468
* g++.dg/other/java2.C: New test.
2006-06-23 Danny Smith <dannysmith@users.sourceforge.net>
PR target/27789

View file

@ -0,0 +1,11 @@
// PR c++/???
// { dg-do compile }
extern "Java"
{
struct A {};
}
typedef void* jclass;
A* p = new A; // { dg-error "class\\$" }