@@ -696,6 +696,110 @@ gfc_trans_fail_image (gfc_code *code ATTRIBUTE_UNUSED)
696696 }
697697}
698698
699+ /* Translate the FORM TEAM statement. */
700+
701+ tree
702+ gfc_trans_form_team (gfc_code * code )
703+ {
704+ if (flag_coarray == GFC_FCOARRAY_LIB )
705+ {
706+ gfc_se argse ;
707+ tree team_id ,team_type ;
708+ gfc_init_se (& argse , NULL );
709+ gfc_conv_expr_val (& argse , code -> expr1 );
710+ team_id = fold_convert (integer_type_node , argse .expr );
711+ gfc_init_se (& argse , NULL );
712+ gfc_conv_expr_val (& argse , code -> expr2 );
713+ team_type = gfc_build_addr_expr (ppvoid_type_node , argse .expr );
714+
715+ return build_call_expr_loc (input_location ,
716+ gfor_fndecl_caf_form_team , 3 ,
717+ team_id , team_type ,
718+ build_int_cst (integer_type_node , 0 ));
719+ }
720+ else
721+ {
722+ const char * name = gfc_get_string (PREFIX ("exit_i%d" ), 4 );
723+ gfc_symbol * exsym = gfc_get_intrinsic_sub_symbol (name );
724+ tree tmp = gfc_get_symbol_decl (exsym );
725+ return build_call_expr_loc (input_location , tmp , 1 , integer_zero_node );
726+ }
727+ }
728+
729+ /* Translate the CHANGE TEAM statement. */
730+
731+ tree
732+ gfc_trans_change_team (gfc_code * code )
733+ {
734+ if (flag_coarray == GFC_FCOARRAY_LIB )
735+ {
736+ gfc_se argse ;
737+ tree team_type ;
738+
739+ gfc_init_se (& argse , NULL );
740+ gfc_conv_expr_val (& argse , code -> expr1 );
741+ team_type = gfc_build_addr_expr (ppvoid_type_node , argse .expr );
742+
743+ return build_call_expr_loc (input_location ,
744+ gfor_fndecl_caf_change_team , 2 , team_type ,
745+ build_int_cst (integer_type_node , 0 ));
746+ }
747+ else
748+ {
749+ const char * name = gfc_get_string (PREFIX ("exit_i%d" ), 4 );
750+ gfc_symbol * exsym = gfc_get_intrinsic_sub_symbol (name );
751+ tree tmp = gfc_get_symbol_decl (exsym );
752+ return build_call_expr_loc (input_location , tmp , 1 , integer_zero_node );
753+ }
754+ }
755+
756+ /* Translate the END TEAM statement. */
757+
758+ tree
759+ gfc_trans_end_team (gfc_code * code ATTRIBUTE_UNUSED )
760+ {
761+ if (flag_coarray == GFC_FCOARRAY_LIB )
762+ {
763+ return build_call_expr_loc (input_location ,
764+ gfor_fndecl_caf_end_team , 1 ,
765+ build_int_cst (pchar_type_node , 0 ));
766+ }
767+ else
768+ {
769+ const char * name = gfc_get_string (PREFIX ("exit_i%d" ), 4 );
770+ gfc_symbol * exsym = gfc_get_intrinsic_sub_symbol (name );
771+ tree tmp = gfc_get_symbol_decl (exsym );
772+ return build_call_expr_loc (input_location , tmp , 1 , integer_zero_node );
773+ }
774+ }
775+
776+ /* Translate the SYNC TEAM statement. */
777+
778+ tree
779+ gfc_trans_sync_team (gfc_code * code )
780+ {
781+ if (flag_coarray == GFC_FCOARRAY_LIB )
782+ {
783+ gfc_se argse ;
784+ tree team_type ;
785+
786+ gfc_init_se (& argse , NULL );
787+ gfc_conv_expr_val (& argse , code -> expr1 );
788+ team_type = gfc_build_addr_expr (ppvoid_type_node , argse .expr );
789+
790+ return build_call_expr_loc (input_location ,
791+ gfor_fndecl_caf_sync_team , 2 ,
792+ team_type ,
793+ build_int_cst (integer_type_node , 0 ));
794+ }
795+ else
796+ {
797+ const char * name = gfc_get_string (PREFIX ("exit_i%d" ), 4 );
798+ gfc_symbol * exsym = gfc_get_intrinsic_sub_symbol (name );
799+ tree tmp = gfc_get_symbol_decl (exsym );
800+ return build_call_expr_loc (input_location , tmp , 1 , integer_zero_node );
801+ }
802+ }
699803
700804tree
701805gfc_trans_lock_unlock (gfc_code * code , gfc_exec_op op )
0 commit comments