From owner-sc22wg5+sc22wg5-dom9=www.open-std.org@open-std.org  Fri Mar 15 18:29:02 2024
Return-Path: <owner-sc22wg5+sc22wg5-dom9=www.open-std.org@open-std.org>
X-Original-To: sc22wg5-dom9
Delivered-To: sc22wg5-dom9@www.open-std.org
Received: by www.open-std.org (Postfix, from userid 521)
	id ED9FA356D6C; Fri, 15 Mar 2024 18:29:01 +0100 (CET)
Delivered-To: sc22wg5@open-std.org
Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2063.outbound.protection.outlook.com [40.107.93.63])
	by www.open-std.org (Postfix) with ESMTP id 4BA57356D48
	for <sc22wg5@open-std.org>; Fri, 15 Mar 2024 18:28:59 +0100 (CET)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=A+7BrFsvV1oqLZPymwJHboCnn2FPpHfGXIP044/d+nzurk7nd6hOqYbJkBTjxhfoH6TbwVADrZ7chfLInImHuAIi09tJGzTy+vc0zuZs4rAhN1MMsAPC7rf4Nj4IOij2i5xdWCzk1blFX4PU+Nwm0ahwveUtw69EjXpKl/Kt5W38ZIHIwA2zvc02hsm0Jqu9vP5Anp8xWlKG1qZXJBqAke21dJlI4+g2NOKeh4PR/CF9/1MXhkLQtggA4aQ2Br2pUeesMbQx6/vRL58iojOWC1Roe1jNGqzD3Ao/f9zYjOz4P1h0Gz7cQ9TpRz7Y22pfMOBbDGI/Ty3dniIjnn2Q4g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=Kv7mJnTx/xVj3i9H25kSZMVngXB91w31MaUA5qW7j+k=;
 b=g+y8R9NVlTVI6eQMQUFzDZrKwlNbzPq+aUUm2wJyPRNumpGHeXjeeMbErzSNJ4EhKkA0iVI/5MoVMjy/lfyphndgg6Gb1txxEf6YT5wu+WodLc99BsFwqzh90hLH1+1aoTyb/EN3UW6Q1H5XeSjhZKK81BHDnAKz8MAWsqeFMa396qyQri4gdQcqr33ilBqCY8gJ7Lc+5qjlTPmcmYM8bcOu6mEaFCaj7fTZbAAEtasU4r6uDrI4d1QzK4HRiYKXCncwRFizntuh7PkpBkpdNdnb85pIK6WMpIRVoe1FYA4Lzm5xzMq/Uk/CdmPfQmlQkaLsPGA5T07tvYPFk3g1LQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com;
 dkim=pass header.d=nvidia.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;
 s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Kv7mJnTx/xVj3i9H25kSZMVngXB91w31MaUA5qW7j+k=;
 b=Vd9QNe3G2oj+/R9S6zjwbTmmxhFqES68vWrpe/NQ3lphLICQJzE4jriKGiB2+FEkP42/0AUXwz7oa5j6/q2ABMPmV3mzMP5AYxa3ouRhsvQKo4OrjgasinE+0ajmgE3JDucD3m4wxoIyGFgf5sjIG1cwIQIhIBtFwZlGEXTqa8A6sgtzmR9INONUaOsP3HzFcBxlhPQvvp9ZAf8LqGnVBxGHGOrVoBya8rpuNWTYrbPkOj7dimMSO0oc/5YJ7LguylgqsngJfl5EsL4IODubgjqeTLbFykWAoutFGZRGAWFzwtu6wlPziqirxIkBjMQAPrEYx8wZ/cznXavbQoSohg==
Received: from DM6PR12MB3130.namprd12.prod.outlook.com (2603:10b6:5:11b::16)
 by PH8PR12MB6962.namprd12.prod.outlook.com (2603:10b6:510:1bd::18) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7386.21; Fri, 15 Mar
 2024 17:28:55 +0000
Received: from DM6PR12MB3130.namprd12.prod.outlook.com
 ([fe80::3b3e:8b99:dc87:e5b3]) by DM6PR12MB3130.namprd12.prod.outlook.com
 ([fe80::3b3e:8b99:dc87:e5b3%5]) with mapi id 15.20.7386.017; Fri, 15 Mar 2024
 17:28:55 +0000
From: Jeff Hammond <jehammond@nvidia.com>
To: WG5 <sc22wg5@open-std.org>
Subject: bind(C) external linkage issues on MacOS
Thread-Topic: bind(C) external linkage issues on MacOS
Thread-Index: AQHadvWkjc0rsKcmVECLDT/CNDzOMA==
Date: Fri, 15 Mar 2024 17:28:55 +0000
Message-ID:
 <DM6PR12MB3130DA4A03A92CC08EF2F8F5CB282@DM6PR12MB3130.namprd12.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=nvidia.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DM6PR12MB3130:EE_|PH8PR12MB6962:EE_
x-ms-office365-filtering-correlation-id: cb1a9564-26ec-4bbb-bcda-08dc451563f6
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 9jeVp3wylBq/cC37N/GtXczRK/hyuqyBYPFCue2gmuR+auVyJfp2cQqw6Eu6AD6QUdb8yjLsG+exZcJyLyLQY9mVVo8ZLUV+g/0hvyd3qlkW/MOBZ2S4UvmaU4ZLZunmu/uVjXp6lpTLzyQvGNu1e1v2CGZYEChdyCprb5H68SSyR9FzTzTs/xQ4BcSz5c4jod9WjlIIVb2yE50U019khxMT+3H3EQBxWx7jCi6oPMrwnJyaDuz978cvSQ1tQJcVXW0lTMfOizXTU0ufh8tVhTQFBILAibW6631H/6e7eLkbij517Lb5Ox6tuv0u9yltwdwtYQe8y9REEuf/+Hhsu1FNwM9qA5X7KMAF/eWqXdIY4gIMMrxGc4AYAa8JVg0kSDEa4rXqnT2ir9AbcPrkcZ4IYvvwjVG75wA0GFq3u3wId6VYTHrEqo9DW2n5Pl8S/e1glVqmzk43OOaZFUy0deKh/xE3C0HxL2flMwHDfieckUkxoLnwjHh5wr4qgJn+tJHAsmHiBqnMCsOpfBX1VSS+cdsVOS8iRJXSaEXCeXHUFY9me7/s8t7H9WocZnCtaZBVT8ulVDK1gu39r5rtxCA2OvhTumvRzoZmwaYWU/Dy24MHvNkGNUzhzIIaXIKPtv7HMhiGmOEdmGvZAyz3qvCgbeuL56I37ZZ9C8+tJE8=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR12MB3130.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(1800799015)(376005)(38070700009);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?Windows-1252?Q?HiTkU7EgSpH9kma1g6ygQgovb91qBIsh8mxlBrCcMZ3uBTqEzXUovbpw?=
 =?Windows-1252?Q?PSgE7C191arnFzFRZ8yEUyoGmZtqjw2HDX8lPTd1FMfOtnZ6hrhq7Yiy?=
 =?Windows-1252?Q?0SNfLgyWZU1l5qey0RlhUWuhdHWGtWPwctOd08mpB9qdlPX9zJeeQpJx?=
 =?Windows-1252?Q?5/GiyNlmqDCqcBfglf7qdXt0QgAODsLaeo0VhS14++PGPznn1v/b/jk6?=
 =?Windows-1252?Q?Om8HK1ZN8ZeL4ZTQKGqiHL3I5mFVO2vtJ6DONmOaguxkZrcMS630gUvP?=
 =?Windows-1252?Q?H7Qzd8S+1jsk2wbCOkafsdwH3O3J3AzUb4n3y8WmZSMkt86daYnfixRL?=
 =?Windows-1252?Q?A0neIFm1Ybk/rzv/fbzsjKSpk0jsJxPMmm9FxCZTRMxorycKQCndwjbQ?=
 =?Windows-1252?Q?O0KN3vCW8rqapORp6CYu6lfFwjFkOc8IHUb4mjgHpjGYw+Qz9wl1k95M?=
 =?Windows-1252?Q?nKpWGRe7ryyINN3qvbVLV50hj9uazejiUAIDkrebUHesKz+RZ+EWLAJg?=
 =?Windows-1252?Q?s4Rf8LsUp2VCaGADBt+Tj4WUgOzDdvCP9ZglID+CiJVEQQ34nicTzLcx?=
 =?Windows-1252?Q?kCNa8xhBy2IFkO0xvWdEwgjkhgu2Qc/Tl+XjurjXAPcJr9F/eD1MGNyr?=
 =?Windows-1252?Q?tgTzPPr6f46MJ9sQ1ALrd0m8Jx0Jri0j7lcOGv40lt5m3ZSKXC8GULMh?=
 =?Windows-1252?Q?zDW6rfd9TR8y7RnCh49n+97ItDXjrTdHXyPyaoOPqp2S1+OWJIdo+0SM?=
 =?Windows-1252?Q?RDAR6MuiAixyQgcNApSWRYPGFOLw/P9lBphrdaW33170HZt//Omi7u1v?=
 =?Windows-1252?Q?KdtEgxGEiy6W8aH6G1rFDoyH8fQWFlNA/53WY1RiiqdZ03V6VCkcgamN?=
 =?Windows-1252?Q?uJiXRkhLgUwZF/elLgzcP0mn+tXCjNZKGCjdskd6nNtnX4veU05sYqh1?=
 =?Windows-1252?Q?YqL+MrEt60tK1qSUuMpQE9w/K8n4fK6Xivn8ajkLJ8QCvruVTuY8re2t?=
 =?Windows-1252?Q?p4vVTi4V/a7Q8kbhzIHxz5xV1EJP/iJSWTYI68hT/PDGu2l7NfBgom3q?=
 =?Windows-1252?Q?ffgK/vLm5DDoEICcYXLxbgeWcSIA13nBmqg4SZh7JQzIbPI4wOzbui10?=
 =?Windows-1252?Q?xdoQz8QQmSVs0/nnQhQhjD6KYbNQ3D9zxOW1GQqHF5fTj7nQJp7RVwXj?=
 =?Windows-1252?Q?Dlc2RfAWxuP0AnPmZYL8TCxEF00e7dl9s7L8pDXT7PxeMvwaW0Ck9eIQ?=
 =?Windows-1252?Q?GnKGE7ol5xfvOPuCFEAI/EWQFu+N5vvKrSIeF2XRlwmDZBLDhsDd0Iob?=
 =?Windows-1252?Q?xvv4v7LI10SD8he5dJ/z9BrpxvT+36V1nlJPH9tvHU8C3art9AQhXCZc?=
 =?Windows-1252?Q?ABXL86zPBksnEOisaNJbeJfpuVi3zpJkB8LKqJlI/bf3FHtlWf0DG0Zp?=
 =?Windows-1252?Q?7Fzbpekf3HEGOBm7HfOrcb6EOGEXC2xZQi9UXxC0KUW4ohHycOEzLmO8?=
 =?Windows-1252?Q?wrhRBNpdjrAGDUEx71LEjCQhas2sw4gwMSbfVqSMyEMzTapNTiwUZU2k?=
 =?Windows-1252?Q?EuG7NrJbGj6bFJZmdjnHQBAMK+V8R8Mt76vzhYEsY8OF8zYRsWxO0be2?=
 =?Windows-1252?Q?N7ETfoxU0msdjgyWS33fUrCbhLwl6qBAQ5CCpLrL7KHvaMWBEBfrbxUW?=
 =?Windows-1252?Q?/pXQoPj2l3a60fwc6x1I9Vdu2Cj8zvadpMMiEdi0/EPbUZ9ZN81sXw?=
 =?Windows-1252?Q?=3D=3D?=
Content-Type: multipart/alternative;
	boundary="_000_DM6PR12MB3130DA4A03A92CC08EF2F8F5CB282DM6PR12MB3130namp_"
MIME-Version: 1.0
X-OriginatorOrg: Nvidia.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB3130.namprd12.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: cb1a9564-26ec-4bbb-bcda-08dc451563f6
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Mar 2024 17:28:55.2879
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ckckmYnyTdswYgdRTSTOnWeyzFYua4S36sEWKgfuMzImtiWiPOAbAoh0WAIkPbrJfJzgBhvCpvRJx8s7TiY8rw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB6962
Sender: owner-sc22wg5@open-std.org
Precedence: bulk

--_000_DM6PR12MB3130DA4A03A92CC08EF2F8F5CB282DM6PR12MB3130namp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

This is both an FYI for those of you who use MacOS but also a possible iden=
tification of a problem in how we specify 19.5.1.5 Linkage association.

Apple has removed =93-commons use_dylibs=94 in recent versions of MacOS.  T=
his flag sets a non-default behavior of COMMON symbols (which include linka=
ge associated bind(C) symbols that are not using obsolescent features) to b=
e =93U=94 (undefined) instead of =93S=94 (uninitialized, small) https://lin=
ux.die.net/man/1/nm.

This flag is required to get a bind(C) module variable that points to a C g=
lobal variable to work properly, as is potentially required by MPI.  There =
are many reports of failures online with both GCC and Intel compilers (I ca=
n only verify the former).

It has been noted that our definition of linkage association may not be ade=
quate to interact with C shared libraries.  I don=92t understand this topic=
 well enough to have an opinion either way.

Has anybody else run into this or thought about it enough to know if there =
is a way to enhance our definition of linkage association so as to not requ=
ire Fortran-specific linker options and behave more like C extern in shared=
 libraries?

Thanks,

Jeff

jhammond@Jeff-M2 fortran % gcc -fPIC -shared extern2.c -o libxxx.so && gfor=
tran -c extern.F90 && ld extern.o libxxx.so -L/opt/homebrew/Cellar/gcc/13.2=
.0/lib/gcc/current/  -lgfortran -commons use_dylibs -o extern && ./extern ;=
 nm extern | grep MPI
MPIR_F08_MPI_IN_PLACE=3D0 &MPIR_F08_MPI_IN_PLACE=3D0x1003a4000 &MPIR_F08_MP=
I_IN_PLACE=3D4298784768
LOC(MPI_IN_PLACE)=3D           4298784768
LOC(buf)=3D           6168523360
sendbuf=3D0x1003a4000, sendbuf=3D4298784768
sendbuf is MPI_IN_PLACE? yes
recvbuf=3D0x16fac3260, recvbuf=3D6168523360
*count=3D1, *datatype=3D2, *op=3D3, *comm=3D4
         911
                 U _MPIR_F08_MPI_IN_PLACE
                 U _MPI_Allreduce


jhammond@Jeff-M2 fortran % gcc -fPIC -shared extern2.c -o libxxx.so && gfor=
tran -c extern.F90 && ld extern.o libxxx.so -L/opt/homebrew/Cellar/gcc/13.2=
.0/lib/gcc/current/  -lgfortran  -o extern && ./extern ; nm extern | grep M=
PI
MPIR_F08_MPI_IN_PLACE=3D0 &MPIR_F08_MPI_IN_PLACE=3D0x102b1c000 &MPIR_F08_MP=
I_IN_PLACE=3D4340170752
LOC(MPI_IN_PLACE)=3D           4339777664
LOC(buf)=3D           6127137376
sendbuf=3D0x102abc080, sendbuf=3D4339777664
sendbuf is MPI_IN_PLACE? no
recvbuf=3D0x16d34b260, recvbuf=3D6127137376
*count=3D1, *datatype=3D2, *op=3D3, *comm=3D4
         911
0000000100008080 S _MPIR_F08_MPI_IN_PLACE
                 U _MPI_Allreduce


=3D=3D> extern2.c <=3D=3D
#include <stdio.h>
#include <stdint.h>

int MPIR_F08_MPI_IN_PLACE;

void p(void)
{
    printf("MPIR_F08_MPI_IN_PLACE=3D%d &MPIR_F08_MPI_IN_PLACE=3D%p &MPIR_F0=
8_MPI_IN_PLACE=3D%zu\n",
            MPIR_F08_MPI_IN_PLACE,   &MPIR_F08_MPI_IN_PLACE,   (intptr_t)&M=
PIR_F08_MPI_IN_PLACE);
}

void MPI_Allreduce(void ** sendbuf, void ** recvbuf,
                   int * count, int * datatype,
                   int * op, int * comm, int * ierror)
{
    printf("sendbuf=3D%p, sendbuf=3D%zu\n", sendbuf, (intptr_t)sendbuf);
    printf("sendbuf is MPI_IN_PLACE? %s\n",
           (intptr_t)sendbuf=3D=3D(intptr_t)&MPIR_F08_MPI_IN_PLACE ? "yes" =
: "no");
    printf("recvbuf=3D%p, recvbuf=3D%zu\n", recvbuf, (intptr_t)recvbuf);
    printf("*count=3D%d, *datatype=3D%d, *op=3D%d, *comm=3D%d\n",
            *count, *datatype, *op, *comm);
    *ierror =3D 911;
}

=3D=3D> extern.F90 <=3D=3D
module mpi
    use iso_c_binding
    !type(c_ptr), bind(C,name=3D"MPI_F_IN_PLACE") :: MPI_IN_PLACE
    integer(c_int), bind(C, name=3D"MPIR_F08_MPI_IN_PLACE"), target :: MPI_=
IN_PLACE
    interface
        subroutine p() bind(C,name=3D"p")
        end subroutine
    end interface
    interface
        SUBROUTINE MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COM=
M, IERROR) &
                   bind(C,name=3D"MPI_Allreduce")
            use iso_c_binding
            import :: MPI_IN_PLACE
            !DEC$ ATTRIBUTES NO_ARG_CHECK :: sendbuf,recvbuf
            !GCC$ ATTRIBUTES NO_ARG_CHECK :: sendbuf,recvbuf
            !$PRAGMA IGNORE_TKR sendbuf,recvbuf
            !DIR$ IGNORE_TKR sendbuf,recvbuf
            !IBM* IGNORE_TKR sendbuf,recvbuf
            INTEGER(kind=3Dc_int) :: SENDBUF(*), RECVBUF(*)
            INTEGER(kind=3Dc_int) :: COUNT, DATATYPE, OP, COMM, IERROR
        END SUBROUTINE MPI_ALLREDUCE
    end interface
end module mpi

program main
    use mpi
    implicit none
    real :: buf(100)
    integer :: ierror
    call p
    buf =3D 17
    print*,'LOC(MPI_IN_PLACE)=3D',LOC(MPI_IN_PLACE)
    print*,'LOC(buf)=3D',LOC(buf)
    call MPI_ALLREDUCE(MPI_IN_PLACE,buf,1,2,3,4,ierror)
    print*,ierror
end program main

--_000_DM6PR12MB3130DA4A03A92CC08EF2F8F5CB282DM6PR12MB3130namp_
Content-Type: text/html; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:w=3D"urn:sc=
hemas-microsoft-com:office:word" xmlns:m=3D"http://schemas.microsoft.com/of=
fice/2004/12/omml" xmlns=3D"http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
252">
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Aptos;
	panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
	{font-family:"Times New Roman \(Body CS\)";
	panose-1:2 11 6 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	font-size:11.0pt;
	font-family:"Aptos",sans-serif;
	mso-ligatures:standardcontextual;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#467886;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Aptos",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:11.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style>
</head>
<body lang=3D"en-FI" link=3D"#467886" vlink=3D"#96607D" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">This=
 is both an FYI for those of you who use MacOS but also a possible identifi=
cation of a problem in how we specify 19.5.1.5 Linkage association.<o:p></o=
:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">Appl=
e has removed =93-commons use_dylibs=94 in recent versions of MacOS.&nbsp; =
This flag sets a non-default behavior of COMMON symbols (which include link=
age associated bind(C) symbols that are not using
 obsolescent features) to be =93U=94 (undefined) instead of =93S=94 (uninit=
ialized, small)
<a href=3D"https://linux.die.net/man/1/nm">https://linux.die.net/man/1/nm</=
a>.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">This=
 flag is required to get a bind(C) module variable that points to a C globa=
l variable to work properly, as is potentially required by MPI.&nbsp; There=
 are many reports of failures online with both
 GCC and Intel compilers (I can only verify the former).<o:p></o:p></span><=
/p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">It h=
as been noted that our definition of linkage association may not be adequat=
e to interact with C shared libraries.&nbsp; I don=92t understand this topi=
c well enough to have an opinion either way.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">Has =
anybody else run into this or thought about it enough to know if there is a=
 way to enhance our definition of linkage association so as to not require =
Fortran-specific linker options and behave
 more like C extern in shared libraries?<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">Than=
ks,<br>
<br>
Jeff<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">jham=
mond@Jeff-M2 fortran % gcc -fPIC -shared extern2.c -o libxxx.so &amp;&amp; =
gfortran -c extern.F90 &amp;&amp; ld extern.o libxxx.so -L/opt/homebrew/Cel=
lar/gcc/13.2.0/lib/gcc/current/&nbsp; -lgfortran -<span style=3D"color:red"=
>commons
 use_dylibs </span>-o extern &amp;&amp; ./extern ; nm extern | grep MPI<o:p=
></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">MPIR=
_F08_MPI_IN_PLACE=3D0 &amp;MPIR_F08_MPI_IN_PLACE=3D0x1003a4000 &amp;MPIR_F0=
8_MPI_IN_PLACE=3D4298784768<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">LOC(=
MPI_IN_PLACE)=3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; 4298784768<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">LOC(=
buf)=3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6168523=
360<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">send=
buf=3D0x1003a4000, sendbuf=3D4298784768<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">send=
buf is MPI_IN_PLACE? yes<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">recv=
buf=3D0x16fac3260, recvbuf=3D6168523360<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">*cou=
nt=3D1, *datatype=3D2, *op=3D3, *comm=3D4<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 911<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt;color=
:red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp; U _MPIR_F08_MPI_IN_PLACE<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; U _MPI_Allreduce<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">jham=
mond@Jeff-M2 fortran % gcc -fPIC -shared extern2.c -o libxxx.so &amp;&amp; =
gfortran -c extern.F90 &amp;&amp; ld extern.o libxxx.so -L/opt/homebrew/Cel=
lar/gcc/13.2.0/lib/gcc/current/&nbsp; -lgfortran&nbsp; -o extern
 &amp;&amp; ./extern ; nm extern | grep MPI<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">MPIR=
_F08_MPI_IN_PLACE=3D0 &amp;MPIR_F08_MPI_IN_PLACE=3D0x102b1c000 &amp;MPIR_F0=
8_MPI_IN_PLACE=3D4340170752<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">LOC(=
MPI_IN_PLACE)=3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; 4339777664<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">LOC(=
buf)=3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6127137=
376<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">send=
buf=3D0x102abc080, sendbuf=3D4339777664<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">send=
buf is MPI_IN_PLACE? no<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">recv=
buf=3D0x16d34b260, recvbuf=3D6127137376<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">*cou=
nt=3D1, *datatype=3D2, *op=3D3, *comm=3D4<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 911<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt;color=
:red">0000000100008080 S _MPIR_F08_MPI_IN_PLACE</span><span lang=3D"EN-US" =
style=3D"font-size:12.0pt"><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; U _MPI_Allreduce<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">=3D=
=3D&gt; extern2.c &lt;=3D=3D<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">#inc=
lude &lt;stdio.h&gt;<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">#inc=
lude &lt;stdint.h&gt;<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">int =
MPIR_F08_MPI_IN_PLACE;<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">void=
 p(void)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">{<o:=
p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; printf(&quot;MPIR_F08_MPI_IN_PLACE=3D%d &amp;MPIR_F08_MPI_IN=
_PLACE=3D%p &amp;MPIR_F08_MPI_IN_PLACE=3D%zu\n&quot;,<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MPIR_F08_MPI=
_IN_PLACE,&nbsp;&nbsp; &amp;MPIR_F08_MPI_IN_PLACE,&nbsp;&nbsp; (intptr_t)&a=
mp;MPIR_F08_MPI_IN_PLACE);<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">}<o:=
p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">void=
 MPI_Allreduce(void ** sendbuf, void ** recvbuf,<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int * count, int * datatype,<o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int * op, int * comm, int * ierror)<o:p></o:p=
></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">{<o:=
p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; printf(&quot;sendbuf=3D%p, sendbuf=3D%zu\n&quot;, sendbuf, (=
intptr_t)sendbuf);<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; printf(&quot;sendbuf is MPI_IN_PLACE? %s\n&quot;,<o:p></o:p>=
</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (intptr_t)sendbuf=
=3D=3D(intptr_t)&amp;MPIR_F08_MPI_IN_PLACE ? &quot;yes&quot; : &quot;no&quo=
t;);<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; printf(&quot;recvbuf=3D%p, recvbuf=3D%zu\n&quot;, recvbuf, (=
intptr_t)recvbuf);<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; printf(&quot;*count=3D%d, *datatype=3D%d, *op=3D%d, *comm=3D=
%d\n&quot;,<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *count, *dat=
atype, *op, *comm);<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; *ierror =3D 911;<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">}<o:=
p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">=3D=
=3D&gt; extern.F90 &lt;=3D=3D<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">modu=
le mpi<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; use iso_c_binding<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; !type(c_ptr), bind(C,name=3D&quot;MPI_F_IN_PLACE&quot;) :: M=
PI_IN_PLACE<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; integer(c_int), bind(C, name=3D&quot;MPIR_F08_MPI_IN_PLACE&q=
uot;), target :: MPI_IN_PLACE<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; interface<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subroutine p() bind(C,name=3D&quot;p=
&quot;)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end subroutine<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; end interface<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; interface<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUBROUTINE MPI_ALLREDUCE(SENDBUF, RE=
CVBUF, COUNT, DATATYPE, OP, COMM, IERROR) &amp;<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bind(C,name=3D&quot;MPI_Allreduce&quot;)<o:p>=
</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use iso_c_bi=
nding<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import :: MP=
I_IN_PLACE<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !DEC$ ATTRIB=
UTES NO_ARG_CHECK :: sendbuf,recvbuf<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !GCC$ ATTRIB=
UTES NO_ARG_CHECK :: sendbuf,recvbuf<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !$PRAGMA IGN=
ORE_TKR sendbuf,recvbuf<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !DIR$ IGNORE=
_TKR sendbuf,recvbuf<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !IBM* IGNORE=
_TKR sendbuf,recvbuf<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER(kind=
=3Dc_int) :: SENDBUF(*), RECVBUF(*)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER(kind=
=3Dc_int) :: COUNT, DATATYPE, OP, COMM, IERROR<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END SUBROUTINE MPI_ALLREDUCE<o:p></o=
:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; end interface<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">end =
module mpi<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt"><o:p=
>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">prog=
ram main<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; use mpi<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; implicit none<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; real :: buf(100)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; integer :: ierror<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; call p<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; buf =3D 17<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; print*,'LOC(MPI_IN_PLACE)=3D',LOC(MPI_IN_PLACE)<o:p></o:p></=
span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; print*,'LOC(buf)=3D',LOC(buf)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; call MPI_ALLREDUCE(MPI_IN_PLACE,buf,1,2,3,4,ierror)<o:p></o:=
p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">&nbs=
p;&nbsp;&nbsp; print*,ierror<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:12.0pt">end =
program main<o:p></o:p></span></p>
</div>
</body>
</html>

--_000_DM6PR12MB3130DA4A03A92CC08EF2F8F5CB282DM6PR12MB3130namp_--
