gcc/libgfortran/intrinsics
Paul Thomas 8b7043164f array.c (resolve_array_list): Apply C4106.
2012-12-19  Paul Thomas  <pault@gcc.gnu.org>

	* array.c (resolve_array_list): Apply C4106.
	* check.c (gfc_check_same_type_as): Exclude polymorphic
	entities from check for extensible types. Improved error
	for disallowed argument types to name the offending type.
	* class.c : Update copyright date.
	(gfc_class_null_initializer): Add argument for initialization
	expression and deal with unlimited polymorphic typespecs.
	(get_unique_type_string): Give unlimited polymorphic
	entities a type string.
	(gfc_intrinsic_hash_value): New function.
	(gfc_build_class_symbol): Incorporate unlimited polymorphic
	entities.
	(gfc_find_derived_vtab): Deal with unlimited polymorphic
	entities.
	(gfc_find_intrinsic_vtab): New function.
	* decl.c (gfc_match_decl_type_spec): Match typespec for
	unlimited polymorphic type.
	(gfc_match_data_decl): Skip to 'ok' if unlimited polymorphic.
	expr.c (gfc_check_pointer_assign): Apply C717.  If unlimited
	polymorphic lvalue, find rvalue vtable for all typespecs,
	except unlimited polymorphic expressions.
	(gfc_check_vardef_context): Handle unlimited polymorphic
	entities.
	* gfortran.h : Add unlimited polymorphic attribute. Add
	second arg to gfc_class_null_initializer primitive and
	primitive for gfc_find_intrinsic_vtab.  Add UNLIMITED_POLY
	to detect unlimited polymorphic expressions.
	* interface.c (gfc_compare_types): If expr1 is unlimited
	polymorphic, always return 1. If expr2 is unlimited polymorphic
	enforce C717.
	(gfc_compare_interfaces): Skip past conditions that do not
	apply for unlimited polymorphic entities.
	(compare_parameter): Make sure that an unlimited polymorphic,
	allocatable or pointer, formal argument is matched by an
	unlimited polymorphic actual argument.
	(compare_actual_formal): Ensure that an intrinsic vtable exists
	to match an unlimited polymorphic formal argument.
	* match.c (gfc_match_allocate): Type kind parameter does not
	need to match an unlimited polymorphic allocate-object.
	(alloc_opt_list): An unlimited polymorphic allocate-object
	requires a typespec or a SOURCE tag.
	(select_intrinsic_set_tmp): New function.
	(select_type_set_tmp): Call new function.  If it returns NULL,
	build a derived type or class temporary instead.
	(gfc_match_type_is): Remove restriction to derived types only.
	Bind(C) or sequence derived types not permitted.
	* misc (gfc_typename):  Printed CLASS(*) for unlimited
	polymorphism.
	* module.c : Add AB_UNLIMITED_POLY to pass unlimited
	polymorphic attribute to and from modules.
	* resolve.c (resolve_common_vars): Unlimited polymorphic
	entities cannot appear in common blocks.
	(resolve_deallocate_expr): Deallocate unlimited polymorphic
	enities.
	(resolve_allocate_expr): Likewise for allocation.  Make sure
	vtable exists.
	(gfc_type_is_extensible): Unlimited polymorphic entities are
	not extensible.
	(resolve_select_type): Handle unlimited polymorphic selectors.
	Ensure that length type parameters are assumed and that names
	for intrinsic types are generated.
	(resolve_fl_var_and_proc): Exclude select type temporaries
	from test of extensibility of type.
	(resolve_fl_variable): Likewise for test that assumed character
	length must be a dummy or a parameter.
	(resolve_fl_derived0): Return SUCCESS unconditionally for
	unlimited polymorphic entities. Also, allow unlimited
	polymorphic components.
	(resolve_fl_derived): Return SUCCESS unconditionally for
	unlimited polymorphic entities.
	(resolve_symbol): Return early with unlimited polymorphic
	entities.
	* simplifiy.c : Update copyright year.
	(gfc_simplify_extends_type_of): No simplification possible
	for unlimited polymorphic arguments.
	* symbol.c (gfc_use_derived): Nothing to do for unlimited
	polymorphic "derived type".
	(gfc_type_compatible): Return unity if ts1 is unlimited
	polymorphic.
	* trans-decl.c (create_function_arglist) Formal arguments
	without a character length should be treated in the same way
	as passed lengths.
	(gfc_trans_deferred_vars): Nullify the vptr of unlimited
	polymorphic pointers. Avoid unlimited polymorphic entities
	triggering gcc_unreachable.
	* trans-expr.c (gfc_conv_intrinsic_to_class): New function.
	(gfc_trans_class_init_assign): Make indirect reference of
	src.expr.
	(gfc_trans_class_assign): Expression NULL of unknown type
	should set NULL vptr on lhs. Treat C717 cases where lhs is
	a derived type and the rhs is unlimited polymorphic.
	(gfc_conv_procedure_call): Handle the conversion of a non-class
	actual argument to match an unlimited polymorphic formal
	argument.  Suppress the passing of a character string length
	in this case.  Make sure that calls to the character __copy
	function have two character string length arguments.
	(gfc_conv_initializer): Pass the initialization expression to
	gfc_class_null_initializer.
	(gfc_trans_subcomponent_assign): Ditto.
	(gfc_conv_structure): Move handling of _size component.
	trans-intrinsic.c: (gfc_conv_same_type_as): Handle conditions
	where unlimited polymorphic arguments have null vptr.
	* trans-stmt.c (trans_associate_var): Correctly treat array
	temporaries associated with unlimited polymorphic selectors.
	Recover the overwritten dtype for the descriptor. Use the _size
	field of the vptr for character string lengths.
	(gfc_trans_allocate): Cope with unlimited polymorphic allocate
	objects; especially with character source tags.
	(reset_vptr): New function.
	(gfc_trans_deallocate): Call it.
	* trans-types.c (gfc_get_derived_type): Detect unlimited
	polymorphic types and deal with cases where the derived type of
	components is null.
	* trans.c : Update copyright year.
	(trans_code): Call gfc_trans_class_assign for C717 cases where
	the lhs is not unlimited polymorphic.

2012-12-19  Paul Thomas  <pault@gcc.gnu.org>

	* intrinsics/extends_type_of.c : Return correct results for
	null vptrs.

2012-12-19  Paul Thomas  <pault@gcc.gnu.org>

	* gfortran.dg/unlimited_polymorphic_1.f03: New test.
	* gfortran.dg/unlimited_polymorphic_2.f03: New test.
	* gfortran.dg/unlimited_polymorphic_3.f03: New test.
	* gfortran.dg/same_type_as.f03: Correct for improved message.

From-SVN: r194622
2012-12-20 00:15:00 +00:00
..
abort.c PR 48915 Abort handling 2011-05-14 11:44:09 +03:00
access.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
args.c transfer.c: Update copyright. 2010-04-01 18:22:00 +00:00
associated.c re PR fortran/37577 ([meta-bug] change internal array descriptor format for better syntax, C interop TR, rank 15) 2009-06-21 19:24:55 +00:00
bit_intrinsics.c re PR fortran/40019 (LEADZ and TRAILZ give wrong results) 2009-05-29 23:27:54 +02:00
c99_functions.c Remove obsolete IRIX 6.5 support 2012-03-14 16:33:37 +00:00
chdir.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
chmod.c chmod.c (chmod_func): On MinGW, don't set is_dir 2012-06-01 07:53:31 +02:00
clock.c Configure cleanup. 2011-11-09 20:25:58 +02:00
cpu_time.c Let the compiler decide whether to inline. 2011-11-10 19:08:24 +02:00
cshift0.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
ctime.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
date_and_time.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
dprod_r8.f90 Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
dtime.c libgfortran.h (descriptor_dimension, [...]): Rename _lbound to lower_bound and data to base_addr. 2012-03-10 18:22:31 +01:00
env.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
eoshift0.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
eoshift2.c re PR fortran/53310 (EOSHIFT leaks memory) 2012-05-11 10:14:56 +02:00
erfc_scaled.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
erfc_scaled_inc.c Update Copyright years for files modified in 2010. 2011-01-03 21:52:22 +01:00
etime.c libgfortran.h (descriptor_dimension, [...]): Rename _lbound to lower_bound and data to base_addr. 2012-03-10 18:22:31 +01:00
execute_command_line.c Configure cleanup. 2011-11-09 20:25:58 +02:00
exit.c Configure cleanup. 2011-11-09 20:25:58 +02:00
extends_type_of.c array.c (resolve_array_list): Apply C4106. 2012-12-20 00:15:00 +00:00
f2c_specifics.F90 Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
fnum.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
gerror.c Configure cleanup. 2011-11-09 20:25:58 +02:00
getXid.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
getcwd.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
getlog.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
hostnm.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
ierrno.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
ishftc.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
iso_c_binding.c libgfortran.h (descriptor_dimension, [...]): Rename _lbound to lower_bound and data to base_addr. 2012-03-10 18:22:31 +01:00
iso_c_binding.h Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
iso_c_generated_procs.c Update Copyright years for files modified in 2010. 2011-01-03 21:52:22 +01:00
kill.c Configure cleanup. 2011-11-09 20:25:58 +02:00
link.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
malloc.c Configure cleanup. 2011-11-09 20:25:58 +02:00
move_alloc.c libgfortran.h (descriptor_dimension, [...]): Rename _lbound to lower_bound and data to base_addr. 2012-03-10 18:22:31 +01:00
mvbits.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
pack_generic.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
perror.c Configure cleanup. 2011-11-09 20:25:58 +02:00
rand.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
random.c libgfortran.h (descriptor_dimension, [...]): Rename _lbound to lower_bound and data to base_addr. 2012-03-10 18:22:31 +01:00
rename.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
reshape_generic.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
reshape_packed.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
selected_char_kind.c Update Copyright years for files modified in 2010. 2011-01-03 21:52:22 +01:00
selected_int_kind.f90 Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
selected_real_kind.f90 intrinsic.h (gfc_check_selected_real_kind, [...]): Update prototypes. 2010-06-25 21:40:37 +02:00
signal.c Configure cleanup. 2011-11-09 20:25:58 +02:00
size.c re PR fortran/37577 ([meta-bug] change internal array descriptor format for better syntax, C interop TR, rank 15) 2009-06-21 19:24:55 +00:00
sleep.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
spread_generic.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
stat.c libgfortran.h (descriptor_dimension, [...]): Rename _lbound to lower_bound and data to base_addr. 2012-03-10 18:22:31 +01:00
string_intrinsics.c re PR libfortran/50192 (Wrong character comparision with wide strings) 2011-08-29 09:05:11 +00:00
string_intrinsics_inc.c re PR libfortran/38199 (missed optimization: I/O performance) 2012-04-15 11:52:44 +00:00
symlnk.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
system.c Configure cleanup. 2011-11-09 20:25:58 +02:00
system_clock.c re PR fortran/55548 (SYSTEM_CLOCK with integer(8) provides nanosecond resolution, but only microsecond precision (without -lrt)) 2012-12-03 23:06:41 +01:00
time.c Configure cleanup. 2011-11-09 20:25:58 +02:00
time_1.h PR 53456 Fix typo in gf_cputime. 2012-06-04 22:13:49 +03:00
transpose_generic.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00
umask.c Configure cleanup. 2011-11-09 20:25:58 +02:00
unlink.c Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
unpack_generic.c Combined get_mem and internal_malloc_size. 2012-03-26 18:16:05 +03:00