Skip to content

Commit cf290a0

Browse files
committed
various fixes from dalcinl
Signed-off-by: Howard Pritchard <[email protected]>
1 parent 047f71b commit cf290a0

File tree

4 files changed

+70
-54
lines changed

4 files changed

+70
-54
lines changed

ompi/mpi/bindings/ompi_bindings/c_type.py

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def type_text(self, enable_count=False):
146146

147147
@property
148148
def final_code(self):
149-
return [f'*{self.name} = {ConvertOMPIToStandard.ERROR_CLASS}(*{self.name});']
149+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.ERROR_CLASS}(*{self.name});']
150150

151151
@property
152152
def argument(self):
@@ -196,7 +196,7 @@ def type_text(self, enable_count=False):
196196

197197
@property
198198
def final_code(self):
199-
return [f'*{self.name} = {ConvertOMPIToStandard.ERROR_CLASS}(*{self.name});']
199+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.ERROR_CLASS}(*{self.name});']
200200

201201
@property
202202
def argument(self):
@@ -791,7 +791,7 @@ class TypeOpOutStandard(StandardABIType):
791791

792792
@property
793793
def final_code(self):
794-
return [f'*{self.name} = {ConvertOMPIToStandard.OP}((MPI_Op) *{self.name});']
794+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.OP}((MPI_Op) *{self.name});']
795795

796796
def type_text(self, enable_count=False):
797797
type_name = self.mangle_name('MPI_Op')
@@ -890,7 +890,7 @@ class TypeSourceOutStandard(StandardABIType):
890890

891891
@property
892892
def final_code(self):
893-
return [f'*{self.name} = {ConvertOMPIToStandard.SOURCE}(*{self.name});']
893+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.SOURCE}(*{self.name});']
894894

895895
def type_text(self, enable_count=False):
896896
return f'int *'
@@ -934,7 +934,7 @@ class TypeCommunicatorOutStandard(StandardABIType):
934934

935935
@property
936936
def final_code(self):
937-
return [f'*{self.name} = {ConvertOMPIToStandard.COMM}((MPI_Comm) *{self.name});']
937+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.COMM}((MPI_Comm) *{self.name});']
938938

939939
def type_text(self, enable_count=False):
940940
type_name = self.mangle_name('MPI_Comm')
@@ -1007,7 +1007,7 @@ class TypeWindowOutStandard(StandardABIType):
10071007

10081008
@property
10091009
def final_code(self):
1010-
return [f'*{self.name} = {ConvertOMPIToStandard.WIN}((MPI_Win) *{self.name});']
1010+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.WIN}((MPI_Win) *{self.name});']
10111011

10121012
def type_text(self, enable_count=False):
10131013
type_name = self.mangle_name('MPI_Win')
@@ -1146,10 +1146,10 @@ def init_code(self):
11461146
@property
11471147
def final_code(self):
11481148
if self.count_param is None:
1149-
return [f'*{self.name} = {ConvertOMPIToStandard.REQUEST}({self.tmpname});']
1149+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.REQUEST}({self.tmpname});']
11501150
else:
11511151
return [
1152-
'for (int i = 0; i < %s; ++i) {' % (self.count_param,),
1152+
f'if (NULL != {self.name}) ' 'for (int i = 0; i < %s; ++i) {' % (self.count_param,),
11531153
f'{self.name}[i] = {ConvertOMPIToStandard.REQUEST}({self.tmpname}[i]);',
11541154
'}',
11551155
]
@@ -1540,7 +1540,7 @@ def argument(self):
15401540

15411541
@property
15421542
def final_code(self):
1543-
return [f'*{self.name} = {ConvertOMPIToStandard.FILE}((MPI_File) *{self.name});']
1543+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.FILE}((MPI_File) *{self.name});']
15441544

15451545
def type_text(self, enable_count=False):
15461546
type_name = self.mangle_name('MPI_File')
@@ -1602,7 +1602,7 @@ class TypeMessageOutStandard(StandardABIType):
16021602

16031603
@property
16041604
def final_code(self):
1605-
return [f'*{self.name} = {ConvertOMPIToStandard.MESSAGE}((MPI_Message) *{self.name});']
1605+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.MESSAGE}((MPI_Message) *{self.name});']
16061606

16071607
@property
16081608
def argument(self):
@@ -1628,7 +1628,7 @@ def init_code(self):
16281628

16291629
@property
16301630
def final_code(self):
1631-
return [f'*{self.name} = {ConvertOMPIToStandard.MESSAGE}({self.tmpname});']
1631+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.MESSAGE}({self.tmpname});']
16321632

16331633
@property
16341634
def argument(self):
@@ -1675,7 +1675,7 @@ class TypeTSLevelOutStandard(StandardABIType):
16751675

16761676
@property
16771677
def final_code(self):
1678-
return [f'*{self.name} = {ConvertOMPIToStandard.TS_LEVEL}((int) *{self.name});']
1678+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.TS_LEVEL}((int) *{self.name});']
16791679

16801680
def type_text(self, enable_count=False):
16811681
return f'int *'
@@ -2205,13 +2205,17 @@ def type_text(self, enable_count=False):
22052205
class TypeErrhandlerOutStandard(Type):
22062206

22072207
@property
2208-
def argument(self):
2209-
return f'(MPI_Errhandler *) {self.name}'
2208+
def final_code(self):
2209+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.ERRHANDLER}((MPI_Errhandler) *{self.name});']
22102210

22112211
def type_text(self, enable_count=False):
22122212
type_name = self.mangle_name('MPI_Errhandler')
22132213
return f'{type_name} *'
22142214

2215+
@property
2216+
def argument(self):
2217+
return f'(MPI_Errhandler *) {self.name}'
2218+
22152219
@Type.add_type('ERRHANDLER_INOUT', abi_type=['ompi'])
22162220
class TypeErrhandlerInOut(TypeErrhandlerOut):
22172221
pass
@@ -2350,7 +2354,7 @@ class TypeSessionOutStandard(StandardABIType):
23502354

23512355
@property
23522356
def final_code(self):
2353-
return [f'*{self.name} = {ConvertOMPIToStandard.SESSION}((MPI_Session) *{self.name});']
2357+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.SESSION}((MPI_Session) *{self.name});']
23542358

23552359
def type_text(self, enable_count=False):
23562360
type_name = self.mangle_name('MPI_Session')
@@ -2419,7 +2423,7 @@ class TypeTEnumOutStandard(StandardABIType):
24192423

24202424
@property
24212425
def final_code(self):
2422-
return [f'*{self.name} = {ConvertOMPIToStandard.T_ENUM}((MPI_T_enum) *{self.name});']
2426+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.T_ENUM}((MPI_T_enum) *{self.name});']
24232427

24242428
def type_text(self, enable_count=False):
24252429
type_name = self.mangle_name('MPI_T_enum')
@@ -2459,7 +2463,7 @@ class TypeCvarHandleStandard(StandardABIType):
24592463

24602464
@property
24612465
def final_code(self):
2462-
return [f'*{self.name} = {ConvertOMPIToStandard.CVAR_HANDLE}((MPI_T_cvar_handle) *{self.name});']
2466+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.CVAR_HANDLE}((MPI_T_cvar_handle) *{self.name});']
24632467

24642468
def type_text(self, enable_count=False):
24652469
type_name = self.mangle_name('MPI_T_cvar_handle')
@@ -2484,7 +2488,7 @@ def init_code(self):
24842488

24852489
@property
24862490
def final_code(self):
2487-
return [f'*{self.name} = {ConvertOMPIToStandard.CVAR_HANDLE}((MPI_T_cvar_handle) {self.tmpname});']
2491+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.CVAR_HANDLE}((MPI_T_cvar_handle) {self.tmpname});']
24882492

24892493
def type_text(self, enable_count=False):
24902494
type_name = self.mangle_name('MPI_T_cvar_handle')
@@ -2514,7 +2518,7 @@ class TypeBindOutStandard(StandardABIType):
25142518

25152519
@property
25162520
def final_code(self):
2517-
return [f'*{self.name} = {ConvertOMPIToStandard.T_BIND}(*{self.name});']
2521+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.T_BIND}(*{self.name});']
25182522

25192523
def type_text(self, enable_count=False):
25202524
return 'int *'
@@ -2586,7 +2590,7 @@ class TypePvarHandleOutStandard(StandardABIType):
25862590

25872591
@property
25882592
def final_code(self):
2589-
return [f'*{self.name} = {ConvertOMPIToStandard.PVAR_HANDLE}((MPI_T_pvar_handle) *{self.name});']
2593+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.PVAR_HANDLE}((MPI_T_pvar_handle) *{self.name});']
25902594

25912595
def type_text(self, enable_count=False):
25922596
type_name = self.mangle_name('MPI_T_pvar_handle')
@@ -2611,7 +2615,7 @@ def init_code(self):
26112615

26122616
@property
26132617
def final_code(self):
2614-
return [f'*{self.name} = {ConvertOMPIToStandard.PVAR_HANDLE}((MPI_T_pvar_handle){self.tmpname});']
2618+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.PVAR_HANDLE}((MPI_T_pvar_handle){self.tmpname});']
26152619

26162620
def type_text(self, enable_count=False):
26172621
type_name = self.mangle_name('MPI_T_pvar_handle')
@@ -2652,7 +2656,7 @@ class TypePvarSessionOutStandard(StandardABIType):
26522656

26532657
@property
26542658
def final_code(self):
2655-
return [f'*{self.name} = {ConvertOMPIToStandard.PVAR_SESSION}((MPI_T_pvar_session)*{self.name});']
2659+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.PVAR_SESSION}((MPI_T_pvar_session)*{self.name});']
26562660

26572661
def type_text(self, enable_count=False):
26582662
type_name = self.mangle_name('MPI_T_pvar_session')
@@ -2678,7 +2682,7 @@ def init_code(self):
26782682

26792683
@property
26802684
def final_code(self):
2681-
return [f'*{self.name} = {ConvertOMPIToStandard.PVAR_SESSION}((MPI_T_pvar_session){self.tmpname});']
2685+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.PVAR_SESSION}((MPI_T_pvar_session){self.tmpname});']
26822686

26832687
def type_text(self, enable_count=False):
26842688
type_name = self.mangle_name('MPI_T_pvar_session')
@@ -2719,7 +2723,7 @@ class TypeTVerbosityOutStandard(StandardABIType):
27192723

27202724
@property
27212725
def final_code(self):
2722-
return [f'*{self.name} = {ConvertOMPIToStandard.T_VERBOSITY}(*{self.name});']
2726+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.T_VERBOSITY}(*{self.name});']
27232727

27242728
def type_text(self, enable_count=False):
27252729
return 'int *'
@@ -2759,7 +2763,7 @@ class TypePvarClassOutStandard(StandardABIType):
27592763

27602764
@property
27612765
def final_code(self):
2762-
return [f'*{self.name} = {ConvertOMPIToStandard.PVAR_CLASS}(*{self.name});']
2766+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.PVAR_CLASS}(*{self.name});']
27632767

27642768
def type_text(self, enable_count=False):
27652769
return f'int *'
@@ -2818,7 +2822,7 @@ class TypeSourceOrderOutStandard(StandardABIType):
28182822

28192823
@property
28202824
def final_code(self):
2821-
return [f'*{self.name} = {ConvertOMPIToStandard.T_SOURCE_ORDER}((MPI_T_source_order) {self.name});']
2825+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.T_SOURCE_ORDER}((MPI_T_source_order) {self.name});']
28222826

28232827
def type_text(self, enable_count=False):
28242828
type_name = self.mangle_name('MPI_T_source_order')
@@ -2915,7 +2919,7 @@ class TypeAttrKeyOutStandard(StandardABIType):
29152919

29162920
@property
29172921
def final_code(self):
2918-
return [f'*{self.name} = {ConvertOMPIToStandard.ATTR_KEY}(*{self.name});']
2922+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.ATTR_KEY}(*{self.name});']
29192923

29202924
def type_text(self, enable_count=False):
29212925
return f'int *'
@@ -2939,7 +2943,7 @@ def init_code(self):
29392943

29402944
@property
29412945
def final_code(self):
2942-
return [f'*{self.name} = {ConvertOMPIToStandard.ATTR_KEY}({self.tmpname});']
2946+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.ATTR_KEY}({self.tmpname});']
29432947

29442948
def type_text(self, enable_count=False):
29452949
return f'int *'
@@ -3021,7 +3025,7 @@ class TyperCommCmpOutStandard(StandardABIType):
30213025

30223026
@property
30233027
def final_code(self):
3024-
return [f'*{self.name} = {ConvertOMPIToStandard.COMM_CMP}(*{self.name});']
3028+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.COMM_CMP}(*{self.name});']
30253029

30263030
def type_text(self, enable_count=False):
30273031
return 'int *'
@@ -3114,7 +3118,7 @@ class TypeModeBitsOutStandard(StandardABIType):
31143118

31153119
@property
31163120
def final_code(self):
3117-
return [f'*{self.name} = {ConvertOMPIToStandard.MODE_BITS}(*{self.name});']
3121+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.MODE_BITS}(*{self.name});']
31183122

31193123
def type_text(self, enable_count=False):
31203124
return 'int *'
@@ -3150,7 +3154,7 @@ class TypeCombinerOutStandard(StandardABIType):
31503154

31513155
@property
31523156
def final_code(self):
3153-
return [f'*{self.name} = {ConvertOMPIToStandard.COMBINER}(*{self.name});']
3157+
return [f'if (NULL != {self.name}) *{self.name} = {ConvertOMPIToStandard.COMBINER}(*{self.name});']
31543158

31553159
def type_text(self, enable_count=False):
31563160
return 'int *'

ompi/mpi/bindings/ompi_bindings/consts.py

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,64 +20,67 @@
2020
# C type: const int
2121
ERROR_CLASSES = [
2222
'MPI_SUCCESS',
23-
'MPI_ERR_BUFFER',
24-
'MPI_ERR_COUNT',
25-
'MPI_ERR_TYPE',
26-
'MPI_ERR_TAG',
27-
'MPI_ERR_COMM',
28-
'MPI_ERR_RANK',
29-
'MPI_ERR_REQUEST',
30-
'MPI_ERR_ROOT',
31-
'MPI_ERR_GROUP',
32-
'MPI_ERR_OP',
33-
'MPI_ERR_TOPOLOGY',
34-
'MPI_ERR_DIMS',
35-
'MPI_ERR_ARG',
36-
'MPI_ERR_UNKNOWN',
37-
'MPI_ERR_TRUNCATE',
38-
'MPI_ERR_OTHER',
39-
'MPI_ERR_INTERN',
40-
'MPI_ERR_PENDING',
41-
'MPI_ERR_IN_STATUS',
23+
'MPI_ERR_ABI',
4224
'MPI_ERR_ACCESS',
4325
'MPI_ERR_AMODE',
26+
'MPI_ERR_ARG',
4427
'MPI_ERR_ASSERT',
4528
'MPI_ERR_BAD_FILE',
4629
'MPI_ERR_BASE',
30+
'MPI_ERR_BUFFER',
31+
'MPI_ERR_COMM',
4732
'MPI_ERR_CONVERSION',
33+
'MPI_ERR_COUNT',
34+
'MPI_ERR_DIMS',
4835
'MPI_ERR_DISP',
4936
'MPI_ERR_DUP_DATAREP',
37+
'MPI_ERR_ERRHANDLER',
38+
'MPI_ERR_FILE',
5039
'MPI_ERR_FILE_EXISTS',
5140
'MPI_ERR_FILE_IN_USE',
52-
'MPI_ERR_FILE',
41+
'MPI_ERR_GROUP',
42+
'MPI_ERR_INFO',
5343
'MPI_ERR_INFO_KEY',
5444
'MPI_ERR_INFO_NOKEY',
5545
'MPI_ERR_INFO_VALUE',
56-
'MPI_ERR_INFO',
46+
'MPI_ERR_INTERN',
47+
'MPI_ERR_IN_STATUS',
5748
'MPI_ERR_IO',
5849
'MPI_ERR_KEYVAL',
5950
'MPI_ERR_LOCKTYPE',
6051
'MPI_ERR_NAME',
61-
'MPI_ERR_NO_MEM',
6252
'MPI_ERR_NOT_SAME',
53+
'MPI_ERR_NO_MEM',
6354
'MPI_ERR_NO_SPACE',
6455
'MPI_ERR_NO_SUCH_FILE',
56+
'MPI_ERR_OP',
57+
'MPI_ERR_OTHER',
58+
'MPI_ERR_PENDING',
6559
'MPI_ERR_PORT',
6660
'MPI_ERR_PROC_ABORTED',
6761
'MPI_ERR_QUOTA',
62+
'MPI_ERR_RANK',
6863
'MPI_ERR_READ_ONLY',
64+
'MPI_ERR_REQUEST',
6965
'MPI_ERR_RMA_ATTACH',
7066
'MPI_ERR_RMA_CONFLICT',
67+
'MPI_ERR_RMA_FLAVOR',
7168
'MPI_ERR_RMA_RANGE',
7269
'MPI_ERR_RMA_SHARED',
7370
'MPI_ERR_RMA_SYNC',
74-
'MPI_ERR_RMA_FLAVOR',
71+
'MPI_ERR_ROOT',
7572
'MPI_ERR_SERVICE',
7673
'MPI_ERR_SESSION',
7774
'MPI_ERR_SIZE',
7875
'MPI_ERR_SPAWN',
76+
'MPI_ERR_TAG',
77+
'MPI_ERR_TOPOLOGY',
78+
'MPI_ERR_TRUNCATE',
79+
'MPI_ERR_TYPE',
80+
'MPI_ERR_UNKNOWN',
7981
'MPI_ERR_UNSUPPORTED_DATAREP',
8082
'MPI_ERR_UNSUPPORTED_OPERATION',
83+
'MPI_ERR_VALUE_TOO_LARGE',
8184
'MPI_ERR_WIN',
8285
'MPI_T_ERR_CANNOT_INIT',
8386
'MPI_T_ERR_NOT_INITIALIZED',

ompi/mpi/c/attr_fn_abi.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
*/
3434
int ompi_abi_mpi_proc_null_val = MPI_PROC_NULL_ABI_INTERNAL;
3535
int ompi_abi_mpi_any_source_val = MPI_ANY_SOURCE_ABI_INTERNAL;
36+
int ompi_abi_mpi_lastusedcode = 0;
3637

3738
/*
3839
* variables used for certain predefined attributes

ompi/mpi/c/comm_get_attr.c.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ PROTOTYPE ERROR_CLASS comm_get_attr(COMM comm, ATTR_KEY comm_keyval,
7070
*(int **)attribute_val = &ompi_abi_mpi_proc_null_val;
7171
} else if (MPI_IO == comm_keyval) {
7272
*(int **)attribute_val = &ompi_abi_mpi_any_source_val;
73+
} else if (MPI_LASTUSEDCODE == comm_keyval) {
74+
/*
75+
* TODO: is this locking good enough?
76+
*/
77+
OPAL_THREAD_LOCK(&comm->c_lock);
78+
ompi_abi_mpi_lastusedcode = ompi_convert_intern_error_abi_error(*(int *)*(void**)attribute_val);
79+
OPAL_THREAD_UNLOCK(&comm->c_lock);
80+
*(int **)attribute_val = &ompi_abi_mpi_lastusedcode;
7381
}
7482
}
7583
#endif

0 commit comments

Comments
 (0)