gcc/libgfortran/intrinsics
Christopher D. Rickett a8b3b0b633 [multiple changes]
2007-07-01  Christopher D. Rickett  <crickett@lanl.gov>

	* interface.c (gfc_compare_derived_types): Special case for comparing
	derived types across namespaces.
	(gfc_compare_types): Deal with BT_VOID.
	(compare_parameter): Use BT_VOID to accept ISO C Binding pointers.
	* trans-expr.c (gfc_conv_function_call): Remove setting parm_kind
	to SCALAR
	(gfc_conv_initializer): Deal with ISO C Binding NULL_PTR and 
	NULL_FUNPTR.
	(gfc_conv_expr): Convert expressions for ISO C Binding derived types.
	* symbol.c (gfc_set_default_type): BIND(C) variables should not be
	implicitly declared.
	(check_conflict): Add BIND(C) and check for conflicts.
	(gfc_add_explicit_interface): Whitespace.	
	(gfc_add_is_bind_c): New function.  
	(gfc_copy_attr): Use it.
	(gfc_new_symbol): Initialize ISO C Binding objects.
	(get_iso_c_binding_dt):  New function.
	(verify_bind_c_derived_type): Ditto.
	(gen_special_c_interop_ptr): Ditto.
	(add_formal_arg): Ditto.
	(gen_cptr_param): Ditto.
	(gen_fptr_param): Ditto.
	(gen_shape_param): Ditto.
	(add_proc_interface): Ditto.
	(build_formal_args): Ditto.
	(generate_isocbinding_symbol):  Ditto.
	(get_iso_c_sym):  Ditto.
	* decl.c (num_idents_on_line, has_name_equals): New variables.
	(verify_c_interop_param): New function.
	(build_sym): Finish binding labels and deal with COMMON blocks.
	(add_init_expr_to_sym): Check if the initialized expression is
	an iso_c_binding named constants
	(variable_decl): Set ISO C Binding type_spec components.
	(gfc_match_kind_spec): Check match for C interoperable kind.
	(match_char_spec): Fix comment. Chnage gfc_match_small_int
	to gfc_match_small_int_expr.  Check for C interoperable kind.
	(match_type_spec): Clear the current binding label.
	(match_attr_spec): Add DECL_IS_BIND_C.  If BIND(C) is found, use it
	to set attributes.
	(set_binding_label): New function.
	(set_com_block_bind_c): Ditto.
	(verify_c_interop): Ditto.
	(verify_com_block_vars_c_interop): Ditto.
	(verify_bind_c_sym): Ditto.
	(set_verify_bind_c_sym): Ditto.
	(set_verify_bind_c_com_block): Ditto.
	(get_bind_c_idents): Ditto.
	(gfc_match_bind_c_stmt): Ditto.
	(gfc_match_data_decl): Use num_idents_on_line.
	(match_result): Deal with right paren in BIND(C).
	(gfc_match_suffix): New function.
	(gfc_match_function_decl): Use it.  Code is re-arranged to deal with
	ISO C Binding result clauses.
	(gfc_match_subroutine):  Deal with BIND(C).
 	(gfc_match_bind_c): New function.
	(gfc_get_type_attr_spec): New function.  Code is re-arranged in and
	taken from gfc_match_derived_decl.
	(gfc_match_derived_decl): Add check for BIND(C).
	* trans-common.c: Forward declare gfc_get_common.
	(gfc_sym_mangled_common_id): Change arg from 'const char *name' to
	'gfc_common_head *com'.  Check for ISO C Binding of the common block.
	(build_common_decl): 'com->name' to 'com in SET_DECL_ASSEMBLER_NAME.
	* gfortran.h: Add GFC_MAX_BINDING_LABEL_LEN
	(bt): Add BT_VOID
	(sym_flavor): Add FL_VOID.
 	(iso_fortran_env_symbol, iso_c_binding_symbol, intmod_id): New enum
	(CInteropKind_t): New struct.
	(c_interop_kinds_table): Use it.  Declare an array of structs.
	(symbol_attribute): Add is_bind_c, is_c_interop, and is_iso_c
	bitfields.
	(gfc_typespec): Add is_c_interop; is_iso_c, and f90_type members.
	(gfc_symbol): Add from_intmod, intmod_sym_id, binding_label, and
	common_block members.
	(gfc_common_head): Add binding_label and is_bind_c members.
	(gfc_gsymbol): Add sym_name, mod_name, and binding_label members.
	Add prototypes for get_c_kind, gfc_validate_c_kind, 
	gfc_check_any_c_kind, gfc_add_is_bind_c, gfc_add_value,
	verify_c_interop, verify_c_interop_param, verify_bind_c_sym,
	verify_bind_c_derived_type, verify_com_block_vars_c_interop,
	generate_isocbinding_symbol, get_iso_c_sym, gfc_iso_c_sub_interface
	* iso-c-binding.def: New file. This file contains the definitions
	of the types provided by the Fortran 2003 ISO_C_BINDING intrinsic
	module.
	* trans-const.c (gfc_conv_constant_to_tree): Deal with C_NULL_PTR
	 or C_NULL_FUNPTR expressions.
	* expr.c (gfc_copy_expr): Add BT_VOID case.  For BT_CHARACTER, the
	ISO C Binding requires a minimum string length of 1 for '\0'.  
	* module.c (intmod_sym): New struct.
	(pointer_info): Add binding_label member.
	(write_atom): Set len to 0 for NULL pointers. Check for NULL p and *p.
	(ab_attribute): Add AB_IS_BIND_C, AB_IS_C_INTEROP and AB_IS_ISO_C.
	(attr_bits): Add "IS_BIND_C", "IS_C_INTEROP", and "IS_ISO_C".
	(mio_symbol_attribute): Deal with ISO C Binding attributes.
	(bt_types): Add "VOID".
	(mio_typespec): Deal with ISO C Binding components.
	(mio_namespace_ref): Add intmod variable. 
	(mio_symbol): Check for symbols from an intrinsic module.
	(load_commons): Check for BIND(C) common block.
	(read_module): Read binding_label and use it.
	(write_common): Add label.  Write BIND(C) info.
	(write_blank_common): Blank commons are not BIND(C).  Explicitly
	set is_bind_c=0.
	(write_symbol): Deal with binding_label.
	(sort_iso_c_rename_list): New function.
	(import_iso_c_binding_module): Ditto.
	(create_int_parameter): Add to args.
	(use_iso_fortran_env_module): Adjust to deal with iso_c_binding
	intrinsic module.
	* trans-types.c (c_interop_kinds_table): new array of structs. 
	(gfc_validate_c_kind): New function.
	(gfc_check_any_c_kind): Ditto.
	(get_real_kind_from_node): Ditto.
	(get_int_kind_from_node): Ditto.
	(get_int_kind_from_width): Ditto.
	(get_int_kind_from_minimal_width): Ditto.
	(init_c_interop_kinds): Ditto.
	(gfc_init_kinds): call init_c_interop_kinds.
	(gfc_typenode_for_spec): Adjust for BT_VOID and ISO C Binding pointers.
	Adjust handling of BT_DERIVED.
	(gfc_sym_type): Whitespace.
	(gfc_get_derived_type):  Account for iso_c_binding derived types
	* resolve.c (is_scalar_expr_ptr): New function.
	(gfc_iso_c_func_interface): Ditto.
	(resolve_function): Use gfc_iso_c_func_interface. 
	(set_name_and_label): New function.
	(gfc_iso_c_sub_interface): Ditto.
	(resolve_specific_s0): Use gfc_iso_c_sub_interface.
	(resolve_bind_c_comms): New function.
	(resolve_bind_c_derived_types): Ditto.
	(gfc_verify_binding_labels): Ditto.
	(resolve_fl_procedure): Check for ISO C interoperability.
	(resolve_symbol): Check C interoperability.
	(resolve_types): Walk the namespace.  Check COMMON blocks.
	* trans-decl.c (gfc_sym_mangled_identifier):  Prevent the mangling
	of identifiers that have an assigned binding label.
	(gfc_sym_mangled_function_id): Use the binding label rather than
	the mangled name.
	(gfc_finish_var_decl): Put variables that are BIND(C) into a common
	segment of the object file, because this is what C would do.
	(gfc_create_module_variable): Conver to proper types
	(set_tree_decl_type_code): New function.
	(generate_local_decl): Check dummy variables and derived types for
	ISO C Binding attributes.
	* match.c (gfc_match_small_int_expr): New function.
	(gfc_match_name_C): Ditto.
	(match_common_name): Deal with ISO C Binding in COMMON blocks
	* trans-io.c (transfer_expr):  Deal with C_NULL_PTR or C_NULL_FUNPTR
	expressions
	* match.h: Add prototypes for gfc_match_small_int_expr,
	gfc_match_name_C, match_common_name, set_com_block_bind_c,
	set_binding_label, set_verify_bind_c_sym,
	set_verify_bind_c_com_block, get_bind_c_idents,
	gfc_match_bind_c_stmt, gfc_match_suffix, gfc_match_bind_c,
	gfc_get_type_attr_spec
	* parse.c (decode_statement): Use gfc_match_bind_c_stmt
	(parse_derived): Init *derived_sym = NULL, and gfc_current_block
	later for valiadation.
	* primary.c (got_delim): Set ISO C Binding components of ts.
	(match_logical_constant): Ditto.
	(match_complex_constant): Ditto.
	(match_complex_constant): Ditto.
	(gfc_match_rvalue): Check for existence of at least one arg for
	C_LOC, C_FUNLOC, and C_ASSOCIATED.
	* misc.c (gfc_clear_ts): Clear ISO C Bindoing components in ts.
	(get_c_kind): New function.

2007-07-01  Christopher D. Rickett  <crickett@lanl.gov>

	* Makefile.in: Add support for iso_c_generated_procs.c and
	iso_c_binding.c.
	* Makefile.am: Ditto.
	* intrinsics/iso_c_generated_procs.c: New file containing helper
	functions.
	* intrinsics/iso_c_binding.c: Ditto.
	* intrinsics/iso_c_binding.h: New file
	* gfortran.map: Include the __iso_c_binding_c_* functions.
	* libgfortran.h: define GFC_NUM_RANK_BITS.

2007-06-23  Christopher D. Rickett  <crickett@lanl.gov>

	* bind_c_array_params.f03: New files for Fortran 2003 ISO C Binding.
	* bind_c_coms.f90: Ditto.
	* bind_c_coms_driver.c: Ditto.
	* bind_c_dts.f90: Ditto.
	* bind_c_dts_2.f03: Ditto.
	* bind_c_dts_2_driver.c: Ditto.
	* bind_c_dts_3.f03: Ditto.
	* bind_c_dts_4.f03: Ditto.
	* bind_c_dts_driver.c: Ditto.
	* bind_c_implicit_vars.f03: Ditto.
	* bind_c_procs.f03: Ditto.
	* bind_c_usage_2.f03: Ditto.
	* bind_c_usage_3.f03: Ditto.
	* bind_c_usage_5.f03: Ditto.
	* bind_c_usage_6.f03: Ditto.
	* bind_c_usage_7.f03: Ditto.
	* bind_c_vars.f90: Ditto.
	* bind_c_vars_driver.c: Ditto.
	* binding_c_table_15_1.f03: Ditto.
	* binding_label_tests.f03: Ditto.
	* binding_label_tests_10.f03: Ditto.
	* binding_label_tests_10_main.f03: Ditto.
	* binding_label_tests_11.f03: Ditto.
	* binding_label_tests_11_main.f03: Ditto.
	* binding_label_tests_12.f03: Ditto.
	* binding_label_tests_13.f03: Ditto.
	* binding_label_tests_13_main.f03: Ditto.
	* binding_label_tests_14.f03: Ditto.
	* binding_label_tests_2.f03: Ditto.
	* binding_label_tests_3.f03: Ditto.
	* binding_label_tests_4.f03: Ditto.
	* binding_label_tests_5.f03: Ditto.
	* binding_label_tests_6.f03: Ditto.
	* binding_label_tests_7.f03: Ditto.
	* binding_label_tests_8.f03: Ditto.
	* binding_label_tests_9.f03: Ditto.
	* c_assoc.f90: Ditto.
	* c_assoc_2.f03: Ditto.
	* c_f_pointer_shape_test.f90: Ditto.
	* c_f_pointer_tests.f90: Ditto.
	* c_f_tests_driver.c: Ditto.
	* c_funloc_tests.f03: Ditto.
	* c_funloc_tests_2.f03: Ditto.
	* c_funloc_tests_3.f03: Ditto.
	* c_funloc_tests_3_funcs.c: Ditto.
	* c_kind_params.f90: Ditto.
	* c_kind_tests_2.f03: Ditto.
	* c_kinds.c: Ditto.
	* c_loc_driver.c: Ditto.
	* c_loc_test.f90: Ditto.
	* c_loc_tests_2.f03: Ditto.
	* c_loc_tests_2_funcs.c: Ditto.
	* c_loc_tests_3.f03: Ditto.
	* c_loc_tests_4.f03: Ditto.
	* c_loc_tests_5.f03: Ditto.
	* c_loc_tests_6.f03: Ditto.
	* c_loc_tests_7.f03: Ditto.
	* c_loc_tests_8.f03: Ditto.
	* c_ptr_tests.f03: Ditto.
	* c_ptr_tests_10.f03: Ditto.
	* c_ptr_tests_5.f03: Ditto.
	* c_ptr_tests_7.f03: Ditto.
	* c_ptr_tests_7_driver.c: Ditto.
	* c_ptr_tests_8.f03: Ditto.
	* c_ptr_tests_8_funcs.c: Ditto.
	* c_ptr_tests_9.f03: Ditto.
	* c_ptr_tests_driver.c: Ditto.
	* c_size_t_driver.c: Ditto.
	* c_size_t_test.f03: Ditto.
	* com_block_driver.f90: Ditto.
	* global_vars_c_init.f90: Ditto.
	* global_vars_c_init_driver.c: Ditto.
	* global_vars_f90_init.f90: Ditto.
	* global_vars_f90_init_driver.c: Ditto.
	* interop_params.f03: Ditto.
	* iso_c_binding_only.f03: Ditto.
	* iso_c_binding_rename_1.f03: Ditto.
	* iso_c_binding_rename_1_driver.c: Ditto.
	* iso_c_binding_rename_2.f03: Ditto.
	* iso_c_binding_rename_2_driver.c: Ditto.
	* kind_tests_2.f03: Ditto.
	* kind_tests_3.f03: Ditto.
	* module_md5_1.f90: Ditto.
	* only_clause_main.c: Ditto.
	* print_c_kinds.f90: Ditto.
	* test_bind_c_parens.f03: Ditto.
	* test_c_assoc.c: Ditto.
	* test_com_block.f90: Ditto.
	* test_common_binding_labels.f03: Ditto.
	* test_common_binding_labels_2.f03: Ditto.
	* test_common_binding_labels_2_main.f03: Ditto.
	* test_common_binding_labels_3.f03: Ditto.
	* test_common_binding_labels_3_main.f03: Ditto.
	* test_only_clause.f90: Ditto.
	* use_iso_c_binding.f90: Ditto.
	* value_5.f90: Ditto.
	* value_test.f90: Ditto.
	* value_tests_f03.f90: Ditto.

From-SVN: r126185
2007-07-02 02:47:21 +00:00
..
abort.c libgfortran ChangeLog: 2006-05-27 10:11:29 +03:00
access.c * intrinsics/access.c (access_func): Remove export directive. 2006-08-05 13:37:52 +00:00
args.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
associated.c associated.c: Check for associated(NULL,NULL). 2006-12-17 19:00:46 +01:00
c99_functions.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
chdir.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
chmod.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
clock.c intrinsic.c (add_functions): Add INT2, SHORT, INT8, LONG, LSTAT, MCLOCK and MCLOCK8 intrinsic functions. 2006-07-26 11:58:48 +00:00
cpu_time.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
cshift0.c re PR libfortran/31286 (cshift uses uninitialized variables) 2007-04-18 08:47:28 +00:00
ctime.c intrinsic.c (add_functions): Add ctime and fdate intrinsics. 2005-11-06 10:17:04 +00:00
date_and_time.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
dprod_r8.f90 gfortran.h (gfc_options_t): Add flag_allow_leading_underscore. 2007-01-20 18:33:20 +00:00
env.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
eoshift0.c re PR libfortran/31295 (Uninitialized variable in libgfortran's _gfortran_eoshift0_4) 2007-05-22 18:19:09 +02:00
eoshift2.c re PR libfortran/31295 (Uninitialized variable in libgfortran's _gfortran_eoshift0_4) 2007-05-22 18:19:09 +02:00
etime.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
exit.c All files: Update FSF address. 2005-08-17 02:49:08 +00:00
f2c_specifics.F90 gfortran.h (gfc_options_t): Add flag_allow_leading_underscore. 2007-01-20 18:33:20 +00:00
fnum.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
gerror.c All files: Update FSF address. 2005-08-17 02:49:08 +00:00
getcwd.c All files: Update FSF address. 2005-08-17 02:49:08 +00:00
getlog.c re PR libfortran/31299 (Use getpwuid(geteuid()) instead of getlogin() for GETLOG()) 2007-04-25 07:36:20 +00:00
getXid.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
hostnm.c re PR libfortran/23803 ([mingw32] getlog malfunction) 2005-09-25 21:02:17 +00:00
ierrno.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
ishftc.c re PR fortran/31964 ([4.2, 4.1 only]ishftc fails with certain thrid argument) 2007-05-19 01:04:03 +00:00
iso_c_binding.c [multiple changes] 2007-07-02 02:47:21 +00:00
iso_c_binding.h [multiple changes] 2007-07-02 02:47:21 +00:00
iso_c_generated_procs.c [multiple changes] 2007-07-02 02:47:21 +00:00
kill.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
link.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
malloc.c check.c (gfc_check_malloc, [...]): New functions. 2005-10-30 12:17:48 +00:00
move_alloc.c re PR fortran/30723 (Freeing memory doesn't need to call a library function) 2007-05-14 19:33:57 +00:00
mvbits.c re PR libfortran/25577 (gfortran routine mvbits returns wrong answer.) 2006-02-08 00:52:37 +01:00
pack_generic.c re PR libfortran/31001 ([4.1 only] PACK crashes on zero-sized arrays) 2007-03-03 16:37:54 +00:00
perror.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
rand.c re PR libfortran/28452 (__gfortran_random_r10 not found) 2006-08-01 17:15:04 +00:00
random.c re PR libfortran/28452 (__gfortran_random_r10 not found) 2006-08-01 17:15:04 +00:00
rename.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
reshape_generic.c re PR fortran/31196 ([4.1 only] wrong code generated with RESHAPE/TRANSPOSE) 2007-03-25 08:29:10 +00:00
reshape_packed.c All files: Update FSF address. 2005-08-17 02:49:08 +00:00
selected_int_kind.f90 gfortran.h (gfc_options_t): Add flag_allow_leading_underscore. 2007-01-20 18:33:20 +00:00
selected_real_kind.f90 gfortran.h (gfc_options_t): Add flag_allow_leading_underscore. 2007-01-20 18:33:20 +00:00
signal.c re PR fortran/30947 (intrinsic: ALARM) 2007-03-08 16:46:16 -05:00
size.c All files: Update FSF address. 2005-08-17 02:49:08 +00:00
sleep.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
spread_generic.c re PR libfortran/27895 (problem with RESHAPE and zero-sized arrays) 2006-10-19 21:48:50 +00:00
stat.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
string_intrinsics.c re PR fortran/31922 ([4.2 only] Accessing uninitialized variable for print *, trim(blank_string)) 2007-05-16 00:37:55 +00:00
symlnk.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
system_clock.c cpu_time.c: Don't include headers already included by libgfortran.h. 2007-04-06 16:47:23 +00:00
system.c re PR libfortran/31607 (CALL SYSTEM produces garbled output when writing to a buffered file) 2007-05-07 19:48:40 +00:00
time.c ierrno.c: Don't include "io/io.h". 2006-06-24 12:34:51 +00:00
transpose_generic.c in_pack.m4: Add TODO comment about detecting temporaries... 2006-06-06 11:10:09 +03:00
umask.c All files: Update FSF address. 2005-08-17 02:49:08 +00:00
unlink.c All files: Update FSF address. 2005-08-17 02:49:08 +00:00
unpack_generic.c re PR libfortran/31286 (cshift uses uninitialized variables) 2007-04-18 08:47:28 +00:00