@@ -396,6 +396,17 @@ I8(__alloc04)(__NELEM_T nelem, dtype kind, size_t len,
396396 if (!ISPRESENT (errmsg ))
397397 errmsg = NULL ;
398398
399+ if (* pointer && I8 (__fort_allocated )(* pointer )
400+ && ISPRESENT (stat ) && * stat == 2 ) {
401+ int i ;
402+ char * mp ;
403+ MP_P_STDIO ;
404+ mp = "array already allocated" ;
405+ for (i = 0 ; i < errlen ; i ++ )
406+ errmsg [i ] = (* mp ? * mp ++ : ' ' );
407+ MP_V_STDIO ;
408+ }
409+
399410#if (defined(WIN64 ) || defined(WIN32 ))
400411#define ALN_LARGE
401412#else
@@ -912,7 +923,13 @@ ENTF90(ALLOC03_CHKA, alloc03_chka)(__INT_T *nelem, __INT_T *kind, __INT_T *len,
912923{
913924
914925 if (* pointer && I8 (__fort_allocated )(* pointer )) {
915- __fort_abort ("ALLOCATE: array already allocated" );
926+ if (ISPRESENT (stat )) {
927+ * stat = 2 ;
928+ } else {
929+ __fort_abort ("ALLOCATE: array already allocated" );
930+ }
931+ } else if (ISPRESENT (stat ) && * firsttime ) {
932+ * stat = 0 ;
916933 }
917934 ENTF90 (ALLOC03 ,alloc03 )(nelem , kind , len , stat , pointer , offset ,
918935 firsttime ,CADR (errmsg ), CLEN (errmsg ));
@@ -937,7 +954,7 @@ ENTF90(ALLOC04A, alloc04a)(__NELEM_T *nelem, __INT_T *kind, __INT_T *len,
937954{
938955 ALLHDR ();
939956
940- if (ISPRESENT (stat ) && * firsttime )
957+ if (ISPRESENT (stat ) && * firsttime && * stat != 2 )
941958 * stat = 0 ;
942959
943960 if (!ISPRESENT (stat ) && !* align ) {
@@ -977,7 +994,13 @@ ENTF90(ALLOC04_CHKA, alloc04_chka)(__NELEM_T *nelem, __INT_T *kind,
977994{
978995
979996 if (* pointer && I8 (__fort_allocated )(* pointer )) {
980- __fort_abort ("ALLOCATE: array already allocated" );
997+ if (ISPRESENT (stat )) {
998+ * stat = 2 ;
999+ } else {
1000+ __fort_abort ("ALLOCATE: array already allocated" );
1001+ }
1002+ } else if (ISPRESENT (stat ) && * firsttime ) {
1003+ * stat = 0 ;
9811004 }
9821005 ENTF90 (ALLOC04 ,alloc04 )(nelem , kind , len , stat , pointer , offset , firsttime ,
9831006 align , CADR (errmsg ), CLEN (errmsg ));
0 commit comments