Skip to content

Commit c0ee7ad

Browse files
authored
Merge pull request #6359 from gpaulsen/topic/v4.0.x/mpi1removal
Fix MPI1 function removal [v4.0.x] Issue 6114
2 parents 5a89295 + 6df6a3f commit c0ee7ad

File tree

11 files changed

+202
-67
lines changed

11 files changed

+202
-67
lines changed

ompi/include/mpi.h.in

Lines changed: 106 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
* Copyright (c) 2015 University of Houston. All rights reserved.
2020
* Copyright (c) 2015-2018 Research Organization for Information Science
2121
* and Technology (RIST). All rights reserved.
22-
* Copyright (c) 2017-2018 IBM Corporation. All rights reserved.
22+
* Copyright (c) 2017-2019 IBM Corporation. All rights reserved.
23+
* Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
2324
* $COPYRIGHT$
2425
*
2526
* Additional copyrights may follow
@@ -279,10 +280,50 @@
279280
# define __mpi_interface_deprecated__(msg) __attribute__((__deprecated__))
280281
# endif
281282
# endif
282-
# if (OMPI_ENABLE_MPI1_COMPAT && !OMPI_BUILDING)
283-
# define __mpi_interface_removed__(msg) __mpi_interface_deprecated__(msg)
284-
# define OMPI_OMIT_MPI1_COMPAT_DECLS 0
285-
# endif
283+
# endif
284+
285+
/* For MPI removed APIs, there is no generally portable way to cause
286+
* the C compiler to error with a nice message, on the _usage_ of
287+
* one of these symbols. We've gone with tiered appraoch:
288+
*
289+
* If the user configured with --enable-mpi1-compatibility,
290+
* just emit a compiletime warning (via the deprecation function
291+
* attribute) that they're using an MPI1 removed function.
292+
*
293+
* Otherwise, we'd like to issue a fatal error directing the user
294+
* that they've used an MPI1 removed function. If the user's
295+
* compiler supports C11 _Static_assert feature, we #define
296+
* the MPI routines to instead be a call to _Static_assert
297+
* with an appropreate message suggesting the new MPI3 equivalent.
298+
*
299+
* Otherwise, if the user's compiler supports the error function
300+
* attribute, define the MPI routines with that error attribute.
301+
* This is supported by most modern GNU compilers.
302+
*
303+
* Finally if the compiler doesn't support any of those, just
304+
* Don't declare those MPI routines at all in mpi.h
305+
*
306+
* Don't do MACRO magic for building Profiling library as it
307+
* interferes with the above.
308+
*/
309+
# if (OMPI_ENABLE_MPI1_COMPAT || OMPI_BUILDING)
310+
# define OMPI_OMIT_MPI1_COMPAT_DECLS 0
311+
# define OMPI_REMOVED_USE_STATIC_ASSERT 0
312+
# define __mpi_interface_removed__(func, newfunc) __mpi_interface_deprecated__(#func " was removed in MPI-3.0. Use " #newfunc " instead. continuing...")
313+
# elif (__STDC_VERSION__ >= 201112L)
314+
# define OMPI_OMIT_MPI1_COMPAT_DECLS 1
315+
# define OMPI_REMOVED_USE_STATIC_ASSERT 1
316+
// This macro definition may show up in compiler output. So we both
317+
// outdent it back to column 0 and give it a user-friendly name to
318+
// help users grok what we are trying to tell them here.
319+
#define THIS_SYMBOL_WAS_REMOVED_IN_MPI30(func, newfunc) _Static_assert(0, #func " was removed in MPI-3.0. Use " #newfunc " instead.")
320+
# elif OPAL_HAVE_ATTRIBUTE_ERROR
321+
# define OMPI_OMIT_MPI1_COMPAT_DECLS 0
322+
# define OMPI_REMOVED_USE_STATIC_ASSERT 0
323+
# define __mpi_interface_removed__(func, newfunc) __attribute__((__error__(#func " was removed in MPI-3.0. Use " #newfunc " instead.")))
324+
# else
325+
# define OMPI_OMIT_MPI1_COMPAT_DECLS 1
326+
# define OMPI_REMOVED_USE_STATIC_ASSERT 0
286327
# endif
287328
# endif
288329
#endif
@@ -297,7 +338,15 @@
297338
#endif
298339

299340
#if !defined(__mpi_interface_removed__)
300-
# define __mpi_interface_removed__(msg)
341+
# define __mpi_interface_removed__(A,B)
342+
#endif
343+
344+
#if !defined(THIS_SYMBOL_WAS_REMOVED_IN_MPI30)
345+
# define THIS_SYMBOL_WAS_REMOVED_IN_MPI30(func, newfunc)
346+
#endif
347+
348+
#if !defined(OMPI_REMOVED_USE_STATIC_ASSERT)
349+
# define OMPI_REMOVED_USE_STATIC_ASSERT 0
301350
#endif
302351

303352
#if !defined(OMPI_OMIT_MPI1_COMPAT_DECLS)
@@ -1010,22 +1059,32 @@ OMPI_DECLSPEC extern struct ompi_predefined_info_t ompi_mpi_info_env;
10101059
OMPI_DECLSPEC extern MPI_Fint *MPI_F_STATUS_IGNORE;
10111060
OMPI_DECLSPEC extern MPI_Fint *MPI_F_STATUSES_IGNORE;
10121061

1013-
#if (!OMPI_OMIT_MPI1_COMPAT_DECLS || OMPI_BUILDING)
10141062
/*
10151063
* Removed datatypes. These datatypes are only available if Open MPI
10161064
* was configured with --enable-mpi1-compatibility.
10171065
*
10181066
* These datatypes were formally removed from the MPI specification
10191067
* and should no longer be used in MPI applications.
10201068
*/
1021-
#define MPI_UB OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_ub)
1022-
#define MPI_LB OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_lb)
1069+
#if (OMPI_ENABLE_MPI1_COMPAT || OMPI_BUILDING)
1070+
# define MPI_UB OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_ub)
1071+
# define MPI_LB OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_lb)
1072+
1073+
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_lb;
1074+
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_ub;
1075+
1076+
#else
1077+
/* If not building or configured --enable-mpi1-compatibility, then
1078+
* we don't want these datatypes, instead we define MPI_UB and
1079+
* MPI_LB to our Static Assert message if the compiler supports
1080+
* that staticly assert with a nice message.
1081+
*/
1082+
# if (OMPI_REMOVED_USE_STATIC_ASSERT)
1083+
# define MPI_UB THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_UB, MPI_Type_create_resized);
1084+
# define MPI_LB THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_LB, MPI_Type_create_resized);
1085+
# endif /* OMPI_REMOVED_USE_STATIC_ASSERT */
1086+
#endif /* Removed datatypes */
10231087

1024-
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_lb
1025-
__mpi_interface_removed__("MPI_LB was removed in MPI-3.0; use MPI_Type_create_resized instead.");
1026-
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_ub
1027-
__mpi_interface_removed__("MPI_UB was removed in MPI-3.0; use MPI_Type_create_resized instead.");
1028-
#endif /* !OMPI_OMIT_MPI1_COMPAT_DECLS */
10291088

10301089
/*
10311090
* MPI predefined handles
@@ -2695,61 +2754,74 @@ typedef void (MPI_Handler_function)(MPI_Comm *, int *, ...);
26952754
* and should no longer be used in MPI applications.
26962755
*/
26972756
OMPI_DECLSPEC int MPI_Address(void *location, MPI_Aint *address)
2698-
__mpi_interface_removed__("MPI_Address was removed in MPI-3.0; use MPI_Get_address instead.");
2757+
__mpi_interface_removed__(MPI_Address, MPI_Get_address);
26992758
OMPI_DECLSPEC int PMPI_Address(void *location, MPI_Aint *address)
2700-
__mpi_interface_removed__("PMPI_Address was removed in MPI-3.0; use MPI_Get_address instead.");
2759+
__mpi_interface_removed__(PMPI_Address, PMPI_Get_address);
27012760
OMPI_DECLSPEC int MPI_Errhandler_create(MPI_Handler_function *function,
27022761
MPI_Errhandler *errhandler)
2703-
__mpi_interface_removed__("MPI_Errhandler_create was removed in MPI-3.0; use MPI_Comm_create_errhandler instead.");
2762+
__mpi_interface_removed__(MPI_Errhandler_create, MPI_Comm_create_errhandler);
27042763
OMPI_DECLSPEC int PMPI_Errhandler_create(MPI_Handler_function *function,
27052764
MPI_Errhandler *errhandler)
2706-
__mpi_interface_removed__("PMPI_Errhandler_create was removed in MPI-3.0; use PMPI_Comm_create_errhandler instead.");
2765+
__mpi_interface_removed__(PMPI_Errhandler_create, PMPI_Comm_create_errhandler);
27072766
OMPI_DECLSPEC int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
2708-
__mpi_interface_removed__("MPI_Errhandler_get was removed in MPI-3.0; use MPI_Comm_get_errhandler instead.");
2767+
__mpi_interface_removed__(MPI_Errhandler_get, MPI_Comm_get_errhandler);
27092768
OMPI_DECLSPEC int PMPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
2710-
__mpi_interface_removed__("PMPI_Errhandler_get was removed in MPI-3.0; use PMPI_Comm_get_errhandler instead.");
2769+
__mpi_interface_removed__(PMPI_Errhandler_get, PMPI_Comm_get_errhandler);
27112770
OMPI_DECLSPEC int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
2712-
__mpi_interface_removed__("MPI_Errhandler_set was removed in MPI-3.0; use MPI_Comm_set_errhandler instead.");
2771+
__mpi_interface_removed__(MPI_Errhandler_set, MPI_Comm_set_errhandler);
27132772
OMPI_DECLSPEC int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
2714-
__mpi_interface_removed__("PMPI_Errhandler_set was removed in MPI-3.0; use PMPI_Comm_set_errhandler instead.");
2773+
__mpi_interface_removed__(PMPI_Errhandler_set, PMPI_Comm_set_errhandler);
27152774
OMPI_DECLSPEC int MPI_Type_extent(MPI_Datatype type, MPI_Aint *extent)
2716-
__mpi_interface_removed__("MPI_Type_extent was removed in MPI-3.0; use MPI_Type_get_extent instead.");
2775+
__mpi_interface_removed__(MPI_Type_extent, MPI_Type_get_extent);
27172776
OMPI_DECLSPEC int PMPI_Type_extent(MPI_Datatype type, MPI_Aint *extent)
2718-
__mpi_interface_removed__("PMPI_Type_extent was removed in MPI-3.0; use PMPI_Type_get_extent instead.");
2777+
__mpi_interface_removed__(PMPI_Type_extent, PMPI_Type_get_extent);
27192778
OMPI_DECLSPEC int MPI_Type_hindexed(int count, int array_of_blocklengths[],
27202779
MPI_Aint array_of_displacements[],
27212780
MPI_Datatype oldtype, MPI_Datatype *newtype)
2722-
__mpi_interface_removed__("MPI_Type_hindexed was removed in MPI-3.0; use MPI_Type_create_hindexed instead.");
2781+
__mpi_interface_removed__(MPI_Type_hindexed, MPI_Type_create_hindexed);
27232782
OMPI_DECLSPEC int PMPI_Type_hindexed(int count, int array_of_blocklengths[],
27242783
MPI_Aint array_of_displacements[],
27252784
MPI_Datatype oldtype, MPI_Datatype *newtype)
2726-
__mpi_interface_removed__("PMPI_Type_hindexed was removed in MPI-3.0; use PMPI_Type_create_hindexed instead.");
2785+
__mpi_interface_removed__(PMPI_Type_hindexed, PMPI_Type_create_hindexed);
27272786
OMPI_DECLSPEC int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride,
27282787
MPI_Datatype oldtype, MPI_Datatype *newtype)
2729-
__mpi_interface_removed__("MPI_Type_hvector was removed in MPI-3.0; use MPI_Type_create_hvector instead.");
2788+
__mpi_interface_removed__(MPI_Type_hvector, MPI_Type_create_hvector);
27302789
OMPI_DECLSPEC int PMPI_Type_hvector(int count, int blocklength, MPI_Aint stride,
27312790
MPI_Datatype oldtype, MPI_Datatype *newtype)
2732-
__mpi_interface_removed__("PMPI_Type_hvector was removed in MPI-3.0; use PMPI_Type_create_hvector instead.");
2791+
__mpi_interface_removed__(PMPI_Type_hvector, PMPI_Type_create_hvector);
27332792
OMPI_DECLSPEC int MPI_Type_lb(MPI_Datatype type, MPI_Aint *lb)
2734-
__mpi_interface_removed__("MPI_Type_lb has been removed in MPI-3.0; use MPI_Type_get_extent instead.");
2793+
__mpi_interface_removed__(MPI_Type_lb, MPI_Type_get_extent);
27352794
OMPI_DECLSPEC int PMPI_Type_lb(MPI_Datatype type, MPI_Aint *lb)
2736-
__mpi_interface_removed__("PMPI_Type_lb has been removed in MPI-3.0; use PMPI_Type_get_extent instead.");
2795+
__mpi_interface_removed__(PMPI_Type_lb, PMPI_Type_get_extent);
27372796
OMPI_DECLSPEC int MPI_Type_struct(int count, int array_of_blocklengths[],
27382797
MPI_Aint array_of_displacements[],
27392798
MPI_Datatype array_of_types[],
27402799
MPI_Datatype *newtype)
2741-
__mpi_interface_removed__("MPI_Type_struct was removed in MPI-3.0; use MPI_Type_create_struct instead.");
2800+
__mpi_interface_removed__(MPI_Type_struct, MPI_Type_create_struct);
27422801
OMPI_DECLSPEC int PMPI_Type_struct(int count, int array_of_blocklengths[],
27432802
MPI_Aint array_of_displacements[],
27442803
MPI_Datatype array_of_types[],
27452804
MPI_Datatype *newtype)
2746-
__mpi_interface_removed__("PMPI_Type_struct was removed in MPI-3.0; use PMPI_Type_create_struct instead.");
2805+
__mpi_interface_removed__(PMPI_Type_struct, PMPI_Type_create_struct);
27472806
OMPI_DECLSPEC int MPI_Type_ub(MPI_Datatype mtype, MPI_Aint *ub)
2748-
__mpi_interface_removed__("MPI_Type_ub has been removed in MPI-3.0; use MPI_Type_get_extent instead.");
2807+
__mpi_interface_removed__(MPI_Type_ub, MPI_Type_get_extent);
27492808
OMPI_DECLSPEC int PMPI_Type_ub(MPI_Datatype mtype, MPI_Aint *ub)
2750-
__mpi_interface_removed__("PMPI_Type_ub has been removed in MPI-3.0; use PMPI_Type_get_extent instead.");
2809+
__mpi_interface_removed__(PMPI_Type_ub, PMPI_Type_get_extent);
27512810
#endif /* !OMPI_OMIT_MPI1_COMPAT_DECLS */
27522811

2812+
#if OMPI_REMOVED_USE_STATIC_ASSERT
2813+
#define MPI_Address(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Address, MPI_Get_address)
2814+
#define MPI_Errhandler_create(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Errhandler_create, MPI_Comm_create_errhandler)
2815+
#define MPI_Errhandler_get(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Errhandler_get, MPI_Comm_get_errhandler)
2816+
#define MPI_Errhandler_set(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Errhandler_set, MPI_Comm_set_errhandler)
2817+
#define MPI_Type_extent(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Type_extent, MPI_Type_get_extent)
2818+
#define MPI_Type_hindexed(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Type_hindexed, MPI_Type_create_hindexed)
2819+
#define MPI_Type_hvector(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Type_hvector, MPI_Type_create_hvector)
2820+
#define MPI_Type_lb(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Type_lb, MPI_Type_get_extent)
2821+
#define MPI_Type_struct(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Type_struct, MPI_Type_create_struct)
2822+
#define MPI_Type_ub(...) THIS_SYMBOL_WAS_REMOVED_IN_MPI30(MPI_Type_ub, MPI_Type_get_extent)
2823+
#endif
2824+
27532825
#if defined(c_plusplus) || defined(__cplusplus)
27542826
}
27552827
#endif

ompi/mpi/c/address.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* All rights reserved.
1212
* Copyright (c) 2015 Research Organization for Information Science
1313
* and Technology (RIST). All rights reserved.
14+
* Copyright (c) 2019 IBM Corporation. All rights reserved.
1415
* $COPYRIGHT$
1516
*
1617
* Additional copyrights may follow
@@ -21,16 +22,11 @@
2122
#include "ompi_config.h"
2223
#include <stdio.h>
2324

24-
/* This implementation has been removed from the MPI 3.1 standard.
25+
/* This implementation has been removed from the MPI 3.0 standard.
2526
* Open MPI v4.0.x is keeping the implementation in the library, but
2627
* removing the prototypes from the headers, unless the user configures
2728
* with --enable-mpi1-compatibility.
28-
*
29-
* To prevent having to port these implementations of removed functions
30-
* to the newer MPI calls, we are defining ENABLE_MPI1_COMPAT to 1
31-
* before including the c bindings.
3229
*/
33-
#define ENABLE_MPI1_COMPAT 1
3430

3531
#include "ompi/mpi/c/bindings.h"
3632
#include "ompi/runtime/params.h"
@@ -41,6 +37,10 @@
4137
#if OPAL_HAVE_WEAK_SYMBOLS
4238
#pragma weak MPI_Address = PMPI_Address
4339
#endif
40+
/* undef before defining, to prevent possible redefinition when
41+
* using _Static_assert to error on usage of removed functions.
42+
*/
43+
#undef MPI_Address
4444
#define MPI_Address PMPI_Address
4545
#endif
4646

ompi/mpi/c/errhandler_create.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* All rights reserved.
1212
* Copyright (c) 2015 Research Organization for Information Science
1313
* and Technology (RIST). All rights reserved.
14+
* Copyright (c) 2019 IBM Corporation. All rights reserved.
1415
* $COPYRIGHT$
1516
*
1617
* Additional copyrights may follow
@@ -20,9 +21,11 @@
2021

2122
#include "ompi_config.h"
2223

23-
/* defining ENABLE_MPI1_COMPAT to 1 for removed implementations here.
24-
* see comments in address.c for more information. */
25-
#define ENABLE_MPI1_COMPAT 1
24+
/* This implementation has been removed from the MPI 3.0 standard.
25+
* Open MPI v4.0.x is keeping the implementation in the library, but
26+
* removing the prototypes from the headers, unless the user configures
27+
* with --enable-mpi1-compatibility.
28+
*/
2629

2730
#include "ompi/mpi/c/bindings.h"
2831
#include "ompi/communicator/communicator.h"
@@ -32,6 +35,10 @@
3235
#if OPAL_HAVE_WEAK_SYMBOLS
3336
#pragma weak MPI_Errhandler_create = PMPI_Errhandler_create
3437
#endif
38+
/* undef before defining, to prevent possible redefinition when
39+
* using _Static_assert to error on usage of removed functions.
40+
*/
41+
#undef MPI_Errhandler_create
3542
#define MPI_Errhandler_create PMPI_Errhandler_create
3643
#endif
3744

ompi/mpi/c/errhandler_get.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* All rights reserved.
1212
* Copyright (c) 2015 Research Organization for Information Science
1313
* and Technology (RIST). All rights reserved.
14+
* Copyright (c) 2019 IBM Corporation. All rights reserved.
1415
* $COPYRIGHT$
1516
*
1617
* Additional copyrights may follow
@@ -20,9 +21,11 @@
2021

2122
#include "ompi_config.h"
2223

23-
/* defining ENABLE_MPI1_COMPAT to 1 for removed implementations here.
24-
* see comments in address.c for more information. */
25-
#define ENABLE_MPI1_COMPAT 1
24+
/* This implementation has been removed from the MPI 3.0 standard.
25+
* Open MPI v4.0.x is keeping the implementation in the library, but
26+
* removing the prototypes from the headers, unless the user configures
27+
* with --enable-mpi1-compatibility.
28+
*/
2629

2730
#include "ompi/mpi/c/bindings.h"
2831
#include "ompi/runtime/params.h"
@@ -34,6 +37,10 @@
3437
#if OPAL_HAVE_WEAK_SYMBOLS
3538
#pragma weak MPI_Errhandler_get = PMPI_Errhandler_get
3639
#endif
40+
/* undef before defining, to prevent possible redefinition when
41+
* using _Static_assert to error on usage of removed functions.
42+
*/
43+
#undef MPI_Errhandler_get
3744
#define MPI_Errhandler_get PMPI_Errhandler_get
3845
#endif
3946

ompi/mpi/c/errhandler_set.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* All rights reserved.
1212
* Copyright (c) 2015 Research Organization for Information Science
1313
* and Technology (RIST). All rights reserved.
14+
* Copyright (c) 2019 IBM Corporation. All rights reserved.
1415
* $COPYRIGHT$
1516
*
1617
* Additional copyrights may follow
@@ -20,9 +21,11 @@
2021

2122
#include "ompi_config.h"
2223

23-
/* defining ENABLE_MPI1_COMPAT to 1 for removed implementations here.
24-
* see comments in address.c for more information. */
25-
#define ENABLE_MPI1_COMPAT 1
24+
/* This implementation has been removed from the MPI 3.0 standard.
25+
* Open MPI v4.0.x is keeping the implementation in the library, but
26+
* removing the prototypes from the headers, unless the user configures
27+
* with --enable-mpi1-compatibility.
28+
*/
2629

2730
#include "ompi/mpi/c/bindings.h"
2831
#include "ompi/runtime/params.h"
@@ -34,6 +37,10 @@
3437
#if OPAL_HAVE_WEAK_SYMBOLS
3538
#pragma weak MPI_Errhandler_set = PMPI_Errhandler_set
3639
#endif
40+
/* undef before defining, to prevent possible redefinition when
41+
* using _Static_assert to error on usage of removed functions.
42+
*/
43+
#undef MPI_Errhandler_set
3744
#define MPI_Errhandler_set PMPI_Errhandler_set
3845
#endif
3946

ompi/mpi/c/type_extent.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* All rights reserved.
1212
* Copyright (c) 2015 Research Organization for Information Science
1313
* and Technology (RIST). All rights reserved.
14+
* Copyright (c) 2019 IBM Corporation. All rights reserved.
1415
* $COPYRIGHT$
1516
*
1617
* Additional copyrights may follow
@@ -20,9 +21,11 @@
2021

2122
#include "ompi_config.h"
2223

23-
/* defining ENABLE_MPI1_COMPAT to 1 for removed implementations here.
24-
* see comments in address.c for more information. */
25-
#define ENABLE_MPI1_COMPAT 1
24+
/* This implementation has been removed from the MPI 3.0 standard.
25+
* Open MPI v4.0.x is keeping the implementation in the library, but
26+
* removing the prototypes from the headers, unless the user configures
27+
* with --enable-mpi1-compatibility.
28+
*/
2629

2730
#include "ompi/mpi/c/bindings.h"
2831
#include "ompi/runtime/params.h"
@@ -35,6 +38,10 @@
3538
#if OPAL_HAVE_WEAK_SYMBOLS
3639
#pragma weak MPI_Type_extent = PMPI_Type_extent
3740
#endif
41+
/* undef before defining, to prevent possible redefinition when
42+
* using _Static_assert to error on usage of removed functions.
43+
*/
44+
#undef MPI_Type_extent
3845
#define MPI_Type_extent PMPI_Type_extent
3946
#endif
4047

0 commit comments

Comments
 (0)