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 about 12 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 about 12 years ago
- Status changed from Patch ready to Rejected