Author: kremenek Date: Thu Nov 1 17:23:34 2007 New Revision: 43624 URL: http://llvm.org/viewvc/llvm-project?rev=43624&view=rev Log: Removed ReadVal from SerializeTrait<T>, and also removed it from Deserializer.
There were issues with Visual C++ barfing when instantiating SerializeTrait<T> when "T" was an abstract class AND SerializeTrait<T>::ReadVal was *never* called: template <typename T> struct SerializeTrait { <SNIP> static inline T ReadVal(Deserializer& D) { T::ReadVal(D); } <SNIP> }; Visual C++ would complain about "T" being an abstract class, even though ReadVal was never instantiated (although one of the other member functions were). Removing this from the trait is not a big deal. It was used hardly ever, and users who want "read-by-value" deserialization can simply call the appropriate methods directly instead of relying on trait-based-dispatch. The trait dispatch for serialization/deserialization is simply sugar in many cases (like this one). Modified: llvm/trunk/include/llvm/Bitcode/Deserialize.h llvm/trunk/include/llvm/Bitcode/Serialization.h llvm/trunk/lib/Bitcode/Reader/Deserialize.cpp Modified: llvm/trunk/include/llvm/Bitcode/Deserialize.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/Deserialize.h?rev=43624&r1=43623&r2=43624&view=diff ============================================================================== --- llvm/trunk/include/llvm/Bitcode/Deserialize.h (original) +++ llvm/trunk/include/llvm/Bitcode/Deserialize.h Thu Nov 1 17:23:34 2007 @@ -103,11 +103,6 @@ SerializeTrait<T>::Read(*this,X); return X; } - - template <typename T> - inline T ReadVal() { - return SerializeTrait<T>::ReadVal(*this); - } template <typename T> inline T* Materialize() { Modified: llvm/trunk/include/llvm/Bitcode/Serialization.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/Serialization.h?rev=43624&r1=43623&r2=43624&view=diff ============================================================================== --- llvm/trunk/include/llvm/Bitcode/Serialization.h (original) +++ llvm/trunk/include/llvm/Bitcode/Serialization.h Thu Nov 1 17:23:34 2007 @@ -37,15 +37,13 @@ struct SerializeTrait { static inline void Emit(Serializer& S, const T& X) { X.Emit(S); } static inline void Read(Deserializer& D, T& X) { X.Read(D); } - static inline T ReadVal(Deserializer& D) { T::ReadVal(D); } static inline T* Materialize(Deserializer& D) { return T::Materialize(D); } }; #define SERIALIZE_INT_TRAIT(TYPE)\ template <> struct SerializeTrait<TYPE> {\ static void Emit(Serializer& S, TYPE X);\ - static void Read(Deserializer& S, TYPE& X);\ - static TYPE ReadVal(Deserializer& S); }; + static void Read(Deserializer& S, TYPE& X); }; SERIALIZE_INT_TRAIT(bool) SERIALIZE_INT_TRAIT(unsigned char) Modified: llvm/trunk/lib/Bitcode/Reader/Deserialize.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/Deserialize.cpp?rev=43624&r1=43623&r2=43624&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Reader/Deserialize.cpp (original) +++ llvm/trunk/lib/Bitcode/Reader/Deserialize.cpp Thu Nov 1 17:23:34 2007 @@ -166,9 +166,7 @@ #define INT_READ(TYPE)\ void SerializeTrait<TYPE>::Read(Deserializer& D, TYPE& X) {\ - X = (TYPE) D.ReadInt(); }\ -TYPE SerializeTrait<TYPE>::ReadVal(Deserializer& D) {\ - return (TYPE) D.ReadInt(); } + X = (TYPE) D.ReadInt(); } INT_READ(bool) INT_READ(unsigned char) _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits