Commit 19754d4c by Jason Merrill Committed by Jason Merrill

typeck2.c (digest_init): Make copies where appropriate.

	* typeck2.c (digest_init): Make copies where appropriate.

	* decl2.c (delete_sanity): resolve_offset_ref.

From-SVN: r16727
parent 92f5c135
Wed Nov 26 01:11:24 1997 Jason Merrill <jason@yorick.cygnus.com> Wed Nov 26 01:11:24 1997 Jason Merrill <jason@yorick.cygnus.com>
* typeck2.c (digest_init): Make copies where appropriate.
* decl2.c (delete_sanity): resolve_offset_ref.
* except.c (expand_start_catch_block): Fix catching a reference * except.c (expand_start_catch_block): Fix catching a reference
to pointer. to pointer.
......
*** Changes since G++ version 2.7.2: *** Changes since G++ version 2.7.2:
* A public review copy of the December 1996 Draft of the ANSI/ISO C++ * A public review copy of the December 1996 Draft of the ISO/ANSI C++
proto-standard is now available. See standard is now available. See
http://www.cygnus.com/misc/wp/ http://www.cygnus.com/misc/wp/
...@@ -65,8 +65,17 @@ ...@@ -65,8 +65,17 @@
+ Template friends. + Template friends.
* Exception handling support has been significantly improved and is on by * Exception handling support has been significantly improved and is on by
default. This can result in significant runtime overhead. You can turn default. The compiler supports two mechanisms for walking back up the
it off with -fno-exceptions. call stack; one relies on static information about how registers are
saved, and causes no runtime overhead for code that does not throw
exceptions. The other mechanism uses setjmp and longjmp equivalents, and
can result in quite a bit of runtime overhead. You can determine which
mechanism is the default for your target by compiling a testcase that
uses exceptions and doing an 'nm' on the object file; if it uses __throw,
it's using the first mechanism. If it uses __sjthrow, it's using the
second.
You can turn EH support off with -fno-exceptions.
* RTTI support has been rewritten to work properly and is now on by default. * RTTI support has been rewritten to work properly and is now on by default.
This means code that uses virtual functions will have a modest space This means code that uses virtual functions will have a modest space
...@@ -90,9 +99,9 @@ ...@@ -90,9 +99,9 @@
* New flags: * New flags:
+ New flags -Wsign-promo (warn about potentially confusing promotions + New warning -Wno-pmf-conversion (don't warn about
in overload resolution), -Wno-pmf-conversion (don't warn about converting from a bound member function pointer to function
converting from a bound member function pointer to function pointer). pointer).
+ A flag -Weffc++ has been added for violations of some of the style + A flag -Weffc++ has been added for violations of some of the style
guidelines in Scott Meyers' _Effective C++_ books. guidelines in Scott Meyers' _Effective C++_ books.
...@@ -145,7 +154,7 @@ ...@@ -145,7 +154,7 @@
* The name of a class is now implicitly declared in its own scope; A::A * The name of a class is now implicitly declared in its own scope; A::A
refers to A. refers to A.
* Local classes are now supported. * Local classes are now supported, though not inside templates.
* __attribute__ can now be attached to types as well as declarations. * __attribute__ can now be attached to types as well as declarations.
......
...@@ -1242,7 +1242,10 @@ delete_sanity (exp, size, doing_vec, use_global_delete) ...@@ -1242,7 +1242,10 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
return t; return t;
} }
t = stabilize_reference (convert_from_reference (exp)); t = exp;
if (TREE_CODE (t) == OFFSET_REF)
t = resolve_offset_ref (t);
t = stabilize_reference (convert_from_reference (t));
type = TREE_TYPE (t); type = TREE_TYPE (t);
code = TREE_CODE (type); code = TREE_CODE (type);
...@@ -1270,15 +1273,14 @@ delete_sanity (exp, size, doing_vec, use_global_delete) ...@@ -1270,15 +1273,14 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
if (code == POINTER_TYPE) if (code == POINTER_TYPE)
{ {
#if 0 #if 0
/* As of Valley Forge, you can delete a pointer to constant. */ /* As of Valley Forge, you can delete a pointer to const. */
/* You can't delete a pointer to constant. */
if (TREE_READONLY (TREE_TYPE (type))) if (TREE_READONLY (TREE_TYPE (type)))
{ {
error ("`const *' cannot be deleted"); error ("`const *' cannot be deleted");
return error_mark_node; return error_mark_node;
} }
#endif #endif
/* You also can't delete functions. */ /* You can't delete functions. */
if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE) if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
{ {
error ("cannot delete a function"); error ("cannot delete a function");
......
...@@ -743,6 +743,9 @@ digest_init (type, init, tail) ...@@ -743,6 +743,9 @@ digest_init (type, init, tail)
init = DECL_INITIAL (init); init = DECL_INITIAL (init);
else if (TREE_READONLY_DECL_P (init)) else if (TREE_READONLY_DECL_P (init))
init = decl_constant_value (init); init = decl_constant_value (init);
else if (IS_AGGR_TYPE (type) && TYPE_NEEDS_CONSTRUCTING (type))
init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP,
LOOKUP_NORMAL);
return init; return init;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment