From 72ce53904e04cff14847c817935f942abde22d7e Mon Sep 17 00:00:00 2001 From: fxcoudert Date: Sun, 15 Jun 2014 16:58:53 +0000 Subject: PR fortran/28484 PR fortran/61429 * check.c (gfc_check_system_clock): Improve checking of arguments. * intrinsic.texi: Update doc of SYSTEM_CLOCK. * iresolve.c (gfc_resolve_system_clock): Choose library function used depending on argument kinds. * trans-decl.c (gfc_build_intrinsic_function_decls): Build decls for system_clock_4 and system_clock_8. * trans-intrinsic.c (conv_intrinsic_system_clock): New function. (gfc_conv_intrinsic_subroutine): Call conv_intrinsic_system_clock. * trans.h (gfor_fndecl_system_clock4, gfor_fndecl_system_clock8): New variables. * gfortran.dg/system_clock_1.f90: New file. * gfortran.dg/system_clock_2.f90: New file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211686 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans-decl.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gcc/fortran/trans-decl.c') diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 863e596c639..1940622d9da 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -116,6 +116,8 @@ tree gfor_fndecl_ttynam; tree gfor_fndecl_in_pack; tree gfor_fndecl_in_unpack; tree gfor_fndecl_associated; +tree gfor_fndecl_system_clock4; +tree gfor_fndecl_system_clock8; /* Coarray run-time library function decls. */ @@ -2822,7 +2824,9 @@ static void gfc_build_intrinsic_function_decls (void) { tree gfc_int4_type_node = gfc_get_int_type (4); + tree gfc_pint4_type_node = build_pointer_type (gfc_int4_type_node); tree gfc_int8_type_node = gfc_get_int_type (8); + tree gfc_pint8_type_node = build_pointer_type (gfc_int8_type_node); tree gfc_int16_type_node = gfc_get_int_type (16); tree gfc_logical4_type_node = gfc_get_logical_type (4); tree pchar1_type_node = gfc_get_pchar_type (1); @@ -3021,6 +3025,16 @@ gfc_build_intrinsic_function_decls (void) DECL_PURE_P (gfor_fndecl_sr_kind) = 1; TREE_NOTHROW (gfor_fndecl_sr_kind) = 1; + gfor_fndecl_system_clock4 = gfc_build_library_function_decl ( + get_identifier (PREFIX("system_clock_4")), + void_type_node, 3, gfc_pint4_type_node, gfc_pint4_type_node, + gfc_pint4_type_node); + + gfor_fndecl_system_clock8 = gfc_build_library_function_decl ( + get_identifier (PREFIX("system_clock_8")), + void_type_node, 3, gfc_pint8_type_node, gfc_pint8_type_node, + gfc_pint8_type_node); + /* Power functions. */ { tree ctype, rtype, itype, jtype; -- cgit v1.2.1 From 5e68df578ad6cec465d80c7df9fb970b9bd4a5b8 Mon Sep 17 00:00:00 2001 From: hubicka Date: Sun, 15 Jun 2014 23:38:29 +0000 Subject: * c-family/c-common.c (handle_tls_model_attribute): Use set_decl_tls_model. * cgraph.h (struct varpool_node): Add tls_model. * tree.c (decl_tls_model, set_decl_tls_model): New functions. * tree.h (DECL_TLS_MODEL): Update. (DECL_THREAD_LOCAL_P): Check that variable is static. (decl_tls_model): Declare. (set_decl_tls_model): Declare. * tree-emutls.c (get_emutls_init_templ_addr): First build decl and then set symbol prorperties. (get_emutls_init_templ_addr): Cleanup. (new_emutls_decl): Update. * lto-cgraph.c (lto_output_varpool_node): Stream TLS model (lto_input_varpool_node): Likewise. * lto-streamer-out.c (hash_tree): Likewise. * tree-streamer-in.c (unpack_ts_decl_with_vis_value_fields): Do not stream DECL_TLS_MODEL. * tree-profile.c (init_ic_make_global_vars): Use set_decl_tls_model. * tree-core.h (tree_decl_with_vis): Remove tls_model; update comments. * c-parser.c (c_parser_omp_threadprivate): Likewise. * c-decl.c (merge_decls): Likewise. * decl.c (duplicate_decls): Use set_decl_tls_model. (grokdeclarator): Likewise. * semantics.c (finish_id_expression): Check TLS only for static variables. (finish_omp_threadprivate): Use decl_default_tls_model. * decl2.c (get_guard): Likewise. * call.c (make_temporary_var_for_ref_to_temp): Likewise. * gcc-interface/utils.c (process_attributes): Use set_decl_tls_model. * trans-common.c (build_common_decl): Use set_decl_tls_model. * trans-decl.c (gfc_finish_var_decl): Likewise. (get_proc_pointer_decl): Likewise. * lto.c (compare_tree_sccs_1): Do not compare DECL_TLS_MODEL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211689 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans-decl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gcc/fortran/trans-decl.c') diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 1940622d9da..bd82a905560 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -631,7 +631,7 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym) /* Handle threadprivate variables. */ if (sym->attr.threadprivate && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) - DECL_TLS_MODEL (decl) = decl_default_tls_model (decl); + set_decl_tls_model (decl, decl_default_tls_model (decl)); gfc_finish_decl_attrs (decl, &sym->attr); } @@ -1645,7 +1645,7 @@ get_proc_pointer_decl (gfc_symbol *sym) /* Handle threadprivate procedure pointers. */ if (sym->attr.threadprivate && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) - DECL_TLS_MODEL (decl) = decl_default_tls_model (decl); + set_decl_tls_model (decl, decl_default_tls_model (decl)); attributes = add_attributes_to_decl (sym->attr, NULL_TREE); decl_attributes (&decl, attributes, 0); -- cgit v1.2.1