Bug #2049: allow virtual inheritance from multiple PUPable base classes 26/4926/2
authorSam White <white67@illinois.edu>
Mon, 28 Jan 2019 18:43:42 +0000 (12:43 -0600)
committerSam White <white67@illinois.edu>
Mon, 28 Jan 2019 19:14:37 +0000 (13:14 -0600)
Change-Id: I7ed18e50c1abf386a7e414762e5545dfc0c61b8a

src/util/pup.h

index 99c4338..eb67b48 100644 (file)
@@ -719,14 +719,14 @@ public:
 #define PUPable_operator_inside(className)\
     friend inline void operator|(PUP::er &p,className &a) {a.pup(p);}\
     friend inline void operator|(PUP::er &p,className* &a) {\
-       PUP::able *pa=a;  p(&pa);  a=(className *)pa;\
+       PUP::able *pa=a;  p(&pa);  a=dynamic_cast<className *>(pa);\
     }
 
 //  Macros to be used outside a class body.
 #define PUPable_operator_outside(className)\
     inline void operator|(PUP::er &p,className &a) {a.pup(p);}\
     inline void operator|(PUP::er &p,className* &a) {\
-       PUP::able *pa=a;  p(&pa);  a=(className *)pa;\
+       PUP::able *pa=a;  p(&pa);  a=dynamic_cast<className *>(pa);\
     }
 
 //Declarations to include in a PUP::able's body.