Skip to content

Commit cc28da5

Browse files
authored
[io] Make case values constant expressions (root-project#11148)
Current clang-16 from main complains: "case value is not a constant expression". Even if that error is probably relaxed before Clang 16 is released early next year, there is really no point in converting an integer into an enum just to get a numeric value back. This is (intentionally) a partial revert of commit ac36d87. An alternative solution appears to be replacing EProperty (which refers to the enum type in TVirtualCollectionProxy) with ::EProperty from TDictionary.h. However, since the enum values are used as a bit mask and fCase is defined as UInt_t anyhow, it makes more sense to compare integer constants from the start. Closes root-project#11128
1 parent 819defa commit cc28da5

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

io/io/src/TGenCollectionStreamer.cxx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -389,13 +389,13 @@ void TGenCollectionStreamer::ReadObjects(int nElements, TBuffer &b, const TClass
389389
switch (fVal->fCase) {
390390
case kIsClass:
391391
DOLOOP(b.StreamObject(i, fVal->fType, onFileValClass ));
392-
case EProperty(kBIT_ISSTRING):
392+
case kBIT_ISSTRING:
393393
DOLOOP(i->read_std_string(b));
394-
case EProperty(kIsPointer | kIsClass):
394+
case kIsPointer | kIsClass:
395395
DOLOOP(i->set(b.ReadObjectAny(fVal->fType)));
396-
case EProperty(kIsPointer | kBIT_ISSTRING):
396+
case kIsPointer | kBIT_ISSTRING:
397397
DOLOOP(i->read_std_string_pointer(b));
398-
case EProperty(kIsPointer | kBIT_ISTSTRING | kIsClass):
398+
case kIsPointer | kBIT_ISTSTRING | kIsClass:
399399
DOLOOP(i->read_tstring_pointer(vsn3, b));
400400
}
401401
#undef DOLOOP
@@ -442,20 +442,20 @@ void TGenCollectionStreamer::ReadObjects(int nElements, TBuffer &b, const TClass
442442
fFeed(fEnv->fStart,fEnv->fObject,fEnv->fSize);
443443
fDestruct(fEnv->fStart,fEnv->fSize);
444444
break;
445-
case EProperty(kBIT_ISSTRING):
445+
case kBIT_ISSTRING:
446446
DOLOOP(i->read_std_string(b))
447447
fFeed(fEnv->fStart,fEnv->fObject,fEnv->fSize);
448448
fDestruct(fEnv->fStart,fEnv->fSize);
449449
break;
450-
case EProperty(kIsPointer | kIsClass):
450+
case kIsPointer | kIsClass:
451451
DOLOOP(i->set(b.ReadObjectAny(fVal->fType)));
452452
fFeed(fEnv->fStart,fEnv->fObject,fEnv->fSize);
453453
break;
454-
case EProperty(kIsPointer | kBIT_ISSTRING):
454+
case kIsPointer | kBIT_ISSTRING:
455455
DOLOOP(i->read_std_string_pointer(b))
456456
fFeed(fEnv->fStart,fEnv->fObject,fEnv->fSize);
457457
break;
458-
case EProperty(kIsPointer | kBIT_ISTSTRING | kIsClass):
458+
case kIsPointer | kBIT_ISTSTRING | kIsClass:
459459
DOLOOP(i->read_tstring_pointer(vsn3, b));
460460
fFeed(fEnv->fStart,fEnv->fObject,fEnv->fSize);
461461
break;
@@ -864,16 +864,16 @@ void TGenCollectionStreamer::ReadMap(int nElements, TBuffer &b, const TClass *on
864864
case kIsClass:
865865
b.StreamObject(i, v->fType);
866866
break;
867-
case EProperty(kBIT_ISSTRING):
867+
case kBIT_ISSTRING:
868868
i->read_std_string(b);
869869
break;
870-
case EProperty(kIsPointer | kIsClass):
870+
case kIsPointer | kIsClass:
871871
i->set(b.ReadObjectAny(v->fType));
872872
break;
873-
case EProperty(kIsPointer | kBIT_ISSTRING):
873+
case kIsPointer | kBIT_ISSTRING:
874874
i->read_std_string_pointer(b);
875875
break;
876-
case EProperty(kIsPointer | kBIT_ISTSTRING | kIsClass):
876+
case kIsPointer | kBIT_ISTSTRING | kIsClass:
877877
i->read_tstring_pointer(vsn3, b);
878878
break;
879879
}

0 commit comments

Comments
 (0)