Bug #562
Revision 6519 breaks Core on Linux
Status: | Rejected | Start date: | 11/03/2013 | |
---|---|---|---|---|
Priority: | High | Due date: | ||
Assignee: | Miroslav Fidler | % Done: | 0% | |
Category: | Core | Spent time: | - | |
Target version: | - |
Description
Both GCC and Clang compilers are affected.
With Clang 3.3:
----- Core ( MT SSE2 GCC DEBUG SHARED DEBUG_FULL BLITZ LINUX POSIX ) BLITZ: Cpu.cpp Mt.cpp sheap.cpp String.cpp WString.cpp StrUtil.cpp Bom.cpp Path.cpp NetNode.cpp App.cpp Stream.cpp Blo ckStream.cpp FilterStream.cpp Log.cpp Debug.cpp Ini.cpp Util.cpp mathutil.cpp LocalProcess.cpp Vcont.cpp Hash.cpp Call back.cpp TimeDate.cpp Value.cpp Format.cpp Convert.cpp Color.cpp Gtypes.cpp t.cpp Lang.cpp LangInfo.cpp parser.cpp XML .cpp Xmlize.cpp JSON.cpp Uuid.cpp Ptr.cpp z.cpp Topic.cpp CoWork.cpp MD5.cpp SHA1.cpp InetUtil.cpp Socket.cpp Http.cpp Dli.cpp Win32Util.cpp In file included from /home/h/.upp.out/watchdog/Core/CLANG.Debug.Debug_Full.Mt.Shared.Sse2/$blitz.cpp:3: In file included from /home/h/upp-production/uppsrc/Core/Cpu.cpp:1: In file included from /home/h/upp-production/uppsrc/Core/Core.h:244: /home/h/upp-production/uppsrc/Core/Defs.h:436:55: error: no member named 'IsNullInstance' in 'Upp::Ref' template <class T> bool IsNull(const T& x) { return x.IsNullInstance(); } ~ ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:95:70: note: in instantiation of function template specialization 'Upp: :IsNull<Upp::Ref>' requested here virtual bool IsNull(const void *p) const { return UPP::IsNull(*(T *) p); } ^ /home/h/upp-production/uppsrc/Core/Other.h:5:12: note: in instantiation of member function 'Upp::StdRef<Upp::Ref>::IsN ull' requested here static T o; ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:54: note: in instantiation of function template specialization 'Upp ::Single<Upp::StdRef<Upp::Ref> >' requested here Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:153:59: note: in instantiation of function template specialization 'Upp ::Ref::Ref<Upp::Ref>' requested here inline String& RefString(Ref f) { return GetRef<String>(f); } // Deprecated, use Ref::Get<T> ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:43: error: assigning to 'void *' from incompatible type 'const Upp: :Value *' Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^ ~~ /home/h/upp-production/uppsrc/Core/ValueUtil.h:96:69: note: in instantiation of function template specialization 'Upp: :Ref::Ref<const Upp::Value>' requested here virtual void SetValue(void *p, const Value& v) const { *(T *) p = (T)v; } ^ /home/h/upp-production/uppsrc/Core/Other.h:5:12: note: in instantiation of member function 'Upp::StdRef<Upp::Ref>::Set Value' requested here static T o; ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:54: note: in instantiation of function template specialization 'Upp ::Single<Upp::StdRef<Upp::Ref> >' requested here Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:153:59: note: in instantiation of function template specialization 'Upp ::Ref::Ref<Upp::Ref>' requested here inline String& RefString(Ref f) { return GetRef<String>(f); } // Deprecated, use Ref::Get<T> ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:96:67: error: no viable overloaded '=' virtual void SetValue(void *p, const Value& v) const { *(T *) p = (T)v; } ~~~~~~~~ ^ ~~~~ /home/h/upp-production/uppsrc/Core/Other.h:5:12: note: in instantiation of member function 'Upp::StdRef<const Upp::Val ue>::SetValue' requested here static T o; ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:54: note: in instantiation of function template specialization 'Upp ::Single<Upp::StdRef<const Upp::Value> >' requested here Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:96:69: note: in instantiation of function template specialization 'Upp: :Ref::Ref<const Upp::Value>' requested here virtual void SetValue(void *p, const Value& v) const { *(T *) p = (T)v; } ^ /home/h/upp-production/uppsrc/Core/Other.h:5:12: note: in instantiation of member function 'Upp::StdRef<Upp::Ref>::Set Value' requested here static T o; ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:54: note: in instantiation of function template specialization 'Upp ::Single<Upp::StdRef<Upp::Ref> >' requested here Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:153:59: note: in instantiation of function template specialization 'Upp ::Ref::Ref<Upp::Ref>' requested here inline String& RefString(Ref f) { return GetRef<String>(f); } // Deprecated, use Ref::Get<T> ^ /home/h/upp-production/uppsrc/Core/Value.cpp:31:15: note: candidate function not viable: 'this' argument has type 'con st Upp::Value', but method is not marked const Value& Value::operator=(const Value& v) { ^ In file included from /home/h/.upp.out/watchdog/Core/CLANG.Debug.Debug_Full.Mt.Shared.Sse2/$blitz.cpp:3: In file included from /home/h/upp-production/uppsrc/Core/Cpu.cpp:1: In file included from /home/h/upp-production/uppsrc/Core/Core.h:244: /home/h/upp-production/uppsrc/Core/Defs.h:434:43: error: no viable overloaded '=' template <class T> void SetNull(T& x) { x = Null; } ~ ^ ~~~~ /home/h/upp-production/uppsrc/Core/ValueUtil.h:97:63: note: in instantiation of function template specialization 'Upp: :SetNull<const Upp::Value>' requested here virtual void SetNull(void *p) const { UPP::SetNull(*(T *)p); } ^ /home/h/upp-production/uppsrc/Core/Other.h:5:12: note: in instantiation of member function 'Upp::StdRef<const Upp::Val ue>::SetNull' requested here static T o; ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:54: note: in instantiation of function template specialization 'Upp ::Single<Upp::StdRef<const Upp::Value> >' requested here Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:96:69: note: in instantiation of function template specialization 'Upp: :Ref::Ref<const Upp::Value>' requested here virtual void SetValue(void *p, const Value& v) const { *(T *) p = (T)v; } ^ /home/h/upp-production/uppsrc/Core/Other.h:5:12: note: in instantiation of member function 'Upp::StdRef<Upp::Ref>::Set Value' requested here static T o; ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:54: note: in instantiation of function template specialization 'Upp ::Single<Upp::StdRef<Upp::Ref> >' requested here Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^ /home/h/upp-production/uppsrc/Core/ValueUtil.h:153:59: note: in instantiation of function template specialization 'Upp ::Ref::Ref<Upp::Ref>' requested here inline String& RefString(Ref f) { return GetRef<String>(f); } // Deprecated, use Ref::Get<T> ^ /home/h/upp-production/uppsrc/Core/Value.cpp:31:15: note: candidate function not viable: 'this' argument has type 'con st Upp::Value', but method is not marked const Value& Value::operator=(const Value& v) { ^ 4 errors generated.
With GCC 4.8.2:
----- Core ( MT SSE2 GCC DEBUG SHARED DEBUG_FULL BLITZ LINUX POSIX ) BLITZ: Cpu.cpp Mt.cpp sheap.cpp String.cpp WString.cpp StrUtil.cpp Bom.cpp Path.cpp NetNode.cpp App.cpp Stream.cpp Blo ckStream.cpp FilterStream.cpp Log.cpp Debug.cpp Ini.cpp Util.cpp mathutil.cpp LocalProcess.cpp Vcont.cpp Hash.cpp Call back.cpp TimeDate.cpp Value.cpp Format.cpp Convert.cpp Color.cpp Gtypes.cpp t.cpp Lang.cpp LangInfo.cpp parser.cpp XML .cpp Xmlize.cpp JSON.cpp Uuid.cpp Ptr.cpp z.cpp Topic.cpp CoWork.cpp MD5.cpp SHA1.cpp InetUtil.cpp Socket.cpp Http.cpp Dli.cpp Win32Util.cpp In file included from /home/h/upp-production/uppsrc/Core/Core.h:244:0, from /home/h/upp-production/uppsrc/Core/Cpu.cpp:1, from /home/h/.upp.out/watchdog/Core/GCC.Debug.Debug_Full.Mt.Shared.Sse2/$blitz.cpp:3: /home/h/upp-production/uppsrc/Core/Defs.h: In instantiation of 'bool Upp::IsNull(const T&) [with T = Upp::Ref]': /home/h/upp-production/uppsrc/Core/ValueUtil.h:95:85: required from 'bool Upp::StdRef<T>::IsNull(const void*) const [with T = Upp::Ref]' /home/h/upp-production/uppsrc/Core/Win32Util.cpp:235:1: required from here /home/h/upp-production/uppsrc/Core/Defs.h:436:70: error: 'const class Upp::Ref' has no member named 'IsNullInstance' template <class T> bool IsNull(const T& x) { return x.IsNullInstance(); } ^ In file included from /home/h/upp-production/uppsrc/Core/Core.h:292:0, from /home/h/upp-production/uppsrc/Core/Cpu.cpp:1, from /home/h/.upp.out/watchdog/Core/GCC.Debug.Debug_Full.Mt.Shared.Sse2/$blitz.cpp:3: /home/h/upp-production/uppsrc/Core/ValueUtil.h: In instantiation of 'Upp::Ref::Ref(T&) [with T = const Upp::Value]': /home/h/upp-production/uppsrc/Core/ValueUtil.h:96:67: required from 'void Upp::StdRef<T>::SetValue(void*, const Upp: :Value&) const [with T = Upp::Ref]' /home/h/upp-production/uppsrc/Core/Win32Util.cpp:235:1: required from here /home/h/upp-production/uppsrc/Core/ValueUtil.h:130:43: error: invalid conversion from 'const void*' to 'void*' [-fperm issive] Ref(T& x) { ptr = &x; m = &Single< StdRef<T> >(); } ^
History
#1 Updated by Jan Dolinár over 11 years ago
- File ValueUtil.patch
added
- Status changed from New to Patch ready
This patch (created against 6523, before the revert) solves the problem for me, both in GCC and Clang.
#2 Updated by Miroslav Fidler over 11 years ago
- Status changed from Patch ready to Rejected