diff --git a/uppsrc/Core/Debug.cpp b/uppsrc/Core/Debug.cpp index 2dd597585..33c9703ef 100644 --- a/uppsrc/Core/Debug.cpp +++ b/uppsrc/Core/Debug.cpp @@ -247,7 +247,7 @@ LONG __stdcall sDumpHandler(LPEXCEPTION_POINTERS ep) { char h[200]; sprintf(h, "CRASH: %d-%02d-%02d %02d:%02d:%02d code: 0x%X address: 0x%p", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, - er->ExceptionCode, er->ExceptionAddress); + (int)er->ExceptionCode, er->ExceptionAddress); RLOG("============ CRASH ================================================"); RLOG(h); return sPrev ? (*sPrev)(ep) : 0 /*EXCEPTION_CONTINUE_SEARCH*/; diff --git a/uppsrc/Core/JSON.cpp b/uppsrc/Core/JSON.cpp index 28dabf413..bab484eee 100644 --- a/uppsrc/Core/JSON.cpp +++ b/uppsrc/Core/JSON.cpp @@ -262,7 +262,7 @@ template<> void Jsonize(JsonIO& io, int64& var) } if(IsNumber(v)) { double d = v; - if(d >= INT64_MIN && d <= INT64_MAX) { + if(FitsInInt64(d)) { var = (int64)d; return; } diff --git a/uppsrc/Core/Ops.h b/uppsrc/Core/Ops.h index 0786708a1..df7916e65 100644 --- a/uppsrc/Core/Ops.h +++ b/uppsrc/Core/Ops.h @@ -318,6 +318,11 @@ int SignificantBits64(uint64 x) #endif } +inline bool FitsInInt64(double x) +{ + return x >= -9223372036854775808.0 && x < 9223372036854775808.0; +} + #if defined(COMPILER_MINGW) && !defined(COMPILER_CLANG) #define MINGW_TLS_PATCH diff --git a/uppsrc/Core/Util.cpp b/uppsrc/Core/Util.cpp index 06ec2537d..159b0a5e6 100644 --- a/uppsrc/Core/Util.cpp +++ b/uppsrc/Core/Util.cpp @@ -762,7 +762,7 @@ AbortExc::AbortExc() : String GetErrorMessage(DWORD dwError) { char h[2048]; - sprintf(h, "%08x", dwError); + sprintf(h, "%08x", (int)dwError); #ifdef PLATFORM_WINCE //TODO return h; #else diff --git a/uppsrc/Core/heapdbg.cpp b/uppsrc/Core/heapdbg.cpp index 84437007b..238cabbf3 100644 --- a/uppsrc/Core/heapdbg.cpp +++ b/uppsrc/Core/heapdbg.cpp @@ -46,7 +46,7 @@ struct alignas(16) DbgBlkHeader { static const char *DbgFormat(char *b, DbgBlkHeader *p) { - sprintf(b, "--memory-breakpoint__ %u ", (dword)~(p->serial ^ (uintptr_t)p)); + sprintf(b, "--memory-breakpoint__ %u ", (unsigned int)~(p->serial ^ (uintptr_t)p)); return b; } diff --git a/uppsrc/Core/mathutil.cpp b/uppsrc/Core/mathutil.cpp index 3e6aaff90..d934cf762 100644 --- a/uppsrc/Core/mathutil.cpp +++ b/uppsrc/Core/mathutil.cpp @@ -144,7 +144,7 @@ int64 ffloor64(double value) int64 fceil64(double value) { - return value >= INT64_MAX ? INT64_MAX : value <= INT64_MIN ? INT64_MIN + return value >= (double)INT64_MAX ? INT64_MAX : value <= (double)INT64_MIN ? INT64_MIN : (int64)ceil(value); } diff --git a/uppsrc/CtrlCore/Win32DnD.cpp b/uppsrc/CtrlCore/Win32DnD.cpp index 66c5dafd6..66336477e 100644 --- a/uppsrc/CtrlCore/Win32DnD.cpp +++ b/uppsrc/CtrlCore/Win32DnD.cpp @@ -4,6 +4,13 @@ namespace Upp { +#ifdef COMPILER_CLANG +#define CLANG_NOTHROW __attribute__((nothrow)) +#else +#define CLANG_NOTHROW +#endif + + #define LLOG(x) // DLOG(x) int GetClipboardFormatCode(const char *format_id); @@ -82,7 +89,7 @@ String Get(UDropTarget *dt, const char *fmt) return dt->Get(fmt); } -STDMETHODIMP UDropTarget::QueryInterface(REFIID iid, void ** ppv) +STDMETHODIMP CLANG_NOTHROW UDropTarget::QueryInterface(REFIID iid, void ** ppv) { if(iid == IID_IUnknown || iid == IID_IDropTarget) { *ppv = this; @@ -152,7 +159,7 @@ void UDropTarget::Repeat() Ctrl::DnDRepeat(); } -STDMETHODIMP UDropTarget::DragEnter(LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) +STDMETHODIMP CLANG_NOTHROW UDropTarget::DragEnter(LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) { GuiLock __; LLOG("DragEnter " << pt); @@ -177,7 +184,7 @@ STDMETHODIMP UDropTarget::DragEnter(LPDATAOBJECT pDataObj, DWORD grfKeyState, PO } -STDMETHODIMP UDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) +STDMETHODIMP CLANG_NOTHROW UDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) { LLOG("DragOver " << pt << " keys: " << grfKeyState); DnD(pt, false, pdwEffect, grfKeyState); @@ -197,7 +204,7 @@ void UDropTarget::EndDrag() Ctrl::DnDLeave(); } -STDMETHODIMP UDropTarget::DragLeave() +STDMETHODIMP CLANG_NOTHROW UDropTarget::DragLeave() { LLOG("DragLeave"); EndDrag(); @@ -205,7 +212,7 @@ STDMETHODIMP UDropTarget::DragLeave() return NOERROR; } -STDMETHODIMP UDropTarget::Drop(LPDATAOBJECT, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) +STDMETHODIMP CLANG_NOTHROW UDropTarget::Drop(LPDATAOBJECT, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) { LLOG("Drop"); if(Ctrl::GetDragAndDropSource()) @@ -285,7 +292,7 @@ struct UDropSource : public IDropSource { UDropSource() { rc = 1; } }; -STDMETHODIMP UDataObject::QueryInterface(REFIID iid, void ** ppv) +STDMETHODIMP CLANG_NOTHROW UDataObject::QueryInterface(REFIID iid, void ** ppv) { if(iid == IID_IUnknown || iid == IID_IDataObject) { *ppv = this; @@ -311,7 +318,7 @@ void SetMedium(STGMEDIUM *medium, const String& data) } } -STDMETHODIMP UDataObject::GetData(FORMATETC *fmtetc, STGMEDIUM *medium) +STDMETHODIMP CLANG_NOTHROW UDataObject::GetData(FORMATETC *fmtetc, STGMEDIUM *medium) { String fmt = FromWin32CF(fmtetc->cfFormat); ClipData *s = data.FindPtr(fmt); @@ -323,17 +330,17 @@ STDMETHODIMP UDataObject::GetData(FORMATETC *fmtetc, STGMEDIUM *medium) return DV_E_FORMATETC; } -STDMETHODIMP UDataObject::GetDataHere(FORMATETC *, STGMEDIUM *) +STDMETHODIMP CLANG_NOTHROW UDataObject::GetDataHere(FORMATETC *, STGMEDIUM *) { return DV_E_FORMATETC; } -STDMETHODIMP UDataObject::QueryGetData(FORMATETC *fmtetc) +STDMETHODIMP CLANG_NOTHROW UDataObject::QueryGetData(FORMATETC *fmtetc) { return data.Find(FromWin32CF(fmtetc->cfFormat)) >= 0 ? S_OK : DV_E_FORMATETC; } -STDMETHODIMP UDataObject::GetCanonicalFormatEtc(FORMATETC *, FORMATETC *pformatetcOut) +STDMETHODIMP CLANG_NOTHROW UDataObject::GetCanonicalFormatEtc(FORMATETC *, FORMATETC *pformatetcOut) { pformatetcOut->ptd = NULL; return E_NOTIMPL; @@ -345,7 +352,7 @@ static int CF_PERFORMEDDROPEFFECT = RegisterClipboardFormat(_T("Performed DropEf static int CF_PERFORMEDDROPEFFECT = RegisterClipboardFormat("Performed DropEffect"); #endif -STDMETHODIMP UDataObject::SetData(FORMATETC *fmtetc, STGMEDIUM *medium, BOOL release) +STDMETHODIMP CLANG_NOTHROW UDataObject::SetData(FORMATETC *fmtetc, STGMEDIUM *medium, BOOL release) { if(fmtetc->cfFormat == CF_PERFORMEDDROPEFFECT && medium->tymed == TYMED_HGLOBAL) { DWORD *val = (DWORD*)GlobalLock(medium->hGlobal); @@ -358,7 +365,7 @@ STDMETHODIMP UDataObject::SetData(FORMATETC *fmtetc, STGMEDIUM *medium, BOOL rel return E_NOTIMPL; } -STDMETHODIMP UDataObject::EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ief) +STDMETHODIMP CLANG_NOTHROW UDataObject::EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ief) { UEnumFORMATETC *ef = new UEnumFORMATETC; ef->data = this; @@ -367,23 +374,23 @@ STDMETHODIMP UDataObject::EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ief) return S_OK; } -STDMETHODIMP UDataObject::DAdvise(FORMATETC *, DWORD, IAdviseSink *, DWORD *) +STDMETHODIMP CLANG_NOTHROW UDataObject::DAdvise(FORMATETC *, DWORD, IAdviseSink *, DWORD *) { return OLE_E_ADVISENOTSUPPORTED; } -STDMETHODIMP UDataObject::DUnadvise(DWORD) +STDMETHODIMP CLANG_NOTHROW UDataObject::DUnadvise(DWORD) { return OLE_E_ADVISENOTSUPPORTED; } -STDMETHODIMP UDataObject::EnumDAdvise(LPENUMSTATDATA FAR*) +STDMETHODIMP CLANG_NOTHROW UDataObject::EnumDAdvise(LPENUMSTATDATA FAR*) { return OLE_E_ADVISENOTSUPPORTED; } -STDMETHODIMP UEnumFORMATETC::QueryInterface(REFIID riid, void FAR* FAR* ppvObj) +STDMETHODIMP CLANG_NOTHROW UEnumFORMATETC::QueryInterface(REFIID riid, void FAR* FAR* ppvObj) { if (riid == IID_IUnknown || riid == IID_IEnumFORMATETC) { *ppvObj = this; @@ -394,7 +401,7 @@ STDMETHODIMP UEnumFORMATETC::QueryInterface(REFIID riid, void FAR* FAR* ppvObj) return ResultFromScode(E_NOINTERFACE); } -STDMETHODIMP UEnumFORMATETC::Next(ULONG n, FORMATETC *t, ULONG *fetched) { +STDMETHODIMP CLANG_NOTHROW UEnumFORMATETC::Next(ULONG n, FORMATETC *t, ULONG *fetched) { if(t == NULL) return E_INVALIDARG; if(fetched) *fetched = 0; @@ -406,20 +413,20 @@ STDMETHODIMP UEnumFORMATETC::Next(ULONG n, FORMATETC *t, ULONG *fetched) { return n ? S_FALSE : NOERROR; } -STDMETHODIMP UEnumFORMATETC::Skip(ULONG n) { +STDMETHODIMP CLANG_NOTHROW UEnumFORMATETC::Skip(ULONG n) { ii += n; if(ii >= data->data.GetCount()) return S_FALSE; return NOERROR; } -STDMETHODIMP UEnumFORMATETC::Reset() +STDMETHODIMP CLANG_NOTHROW UEnumFORMATETC::Reset() { ii = 0; return NOERROR; } -STDMETHODIMP UEnumFORMATETC::Clone(IEnumFORMATETC **newEnum) +STDMETHODIMP CLANG_NOTHROW UEnumFORMATETC::Clone(IEnumFORMATETC **newEnum) { if(newEnum == NULL) return E_INVALIDARG; @@ -431,7 +438,7 @@ STDMETHODIMP UEnumFORMATETC::Clone(IEnumFORMATETC **newEnum) return NOERROR; } -STDMETHODIMP UDropSource::QueryInterface(REFIID riid, void **ppvObj) +STDMETHODIMP CLANG_NOTHROW UDropSource::QueryInterface(REFIID riid, void **ppvObj) { if (riid == IID_IUnknown || riid == IID_IDropSource) { *ppvObj = this; @@ -442,7 +449,7 @@ STDMETHODIMP UDropSource::QueryInterface(REFIID riid, void **ppvObj) return ResultFromScode(E_NOINTERFACE); } -STDMETHODIMP UDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) +STDMETHODIMP CLANG_NOTHROW UDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) { if(fEscapePressed) return DRAGDROP_S_CANCEL; @@ -453,7 +460,7 @@ STDMETHODIMP UDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeySta return NOERROR; } -STDMETHODIMP UDropSource::GiveFeedback(DWORD dwEffect) +STDMETHODIMP CLANG_NOTHROW UDropSource::GiveFeedback(DWORD dwEffect) { LLOG("GiveFeedback"); Image m = IsNull(move) ? copy : move; diff --git a/uppsrc/Esc/EscStdLib.cpp b/uppsrc/Esc/EscStdLib.cpp index 7106a857b..8a72a69ea 100644 --- a/uppsrc/Esc/EscStdLib.cpp +++ b/uppsrc/Esc/EscStdLib.cpp @@ -46,7 +46,7 @@ void ESC_to_number(EscEscape& e) if(e[0].IsArray()) { double d = ScanDouble((String)e[0]); if(!IsNull(d)) { - if(d <= INT64_MAX && d >= INT64_MIN) + if(FitsInInt64(d)) e = ScanInt64((String)e[0]); else e = d; diff --git a/uppsrc/Esc/EscValue.cpp b/uppsrc/Esc/EscValue.cpp index 685d9a87f..23afe8604 100644 --- a/uppsrc/Esc/EscValue.cpp +++ b/uppsrc/Esc/EscValue.cpp @@ -212,7 +212,7 @@ String EscValue::ToString(int maxlen, int indent_step, bool hex, int indent) con s << FormatInt64((int64)number); else s << Format("%.8g", number); - if(hex && number >= INT64_MIN && number <= INT64_MAX && (int64)number == number) + if(hex && FitsInInt64(number) && (int64)number == number) s << " 0x" << Format64Hex((int64)number); if(hex && number >= 0 && number < 65536 && (int)number == number) s << ' ' << AsCString(ToUtf8(WString((int)number, 1))); diff --git a/uppsrc/PdfDraw/PdfDraw.cpp b/uppsrc/PdfDraw/PdfDraw.cpp index f993e2b4f..d6702ca27 100644 --- a/uppsrc/PdfDraw/PdfDraw.cpp +++ b/uppsrc/PdfDraw/PdfDraw.cpp @@ -541,7 +541,7 @@ void PdfDraw::DrawPolyPolyPolygonOp(const Point *vertices, int vertex_count, if(fill) PutrgColor(color, pattern); if(stroke) { PutRGColor(outline); PutLineWidth(width); } if(!fill && !stroke) return; - const char *closeop = (fill & stroke ? "B*" : fill ? "f*" : "S"); + const char *closeop = fill && stroke ? "B*" : fill ? "f*" : "S"; while(--disjunct_polygon_count_count >= 0) { int disj = *disjunct_polygon_counts++; while(disj > 0) { diff --git a/uppsrc/ide/Debuggers/Debug.cpp b/uppsrc/ide/Debuggers/Debug.cpp index 7ae31f48a..9f117ee62 100644 --- a/uppsrc/ide/Debuggers/Debug.cpp +++ b/uppsrc/ide/Debuggers/Debug.cpp @@ -416,13 +416,14 @@ bool Pdb::RunToException() #else && bp_set.Find(t.context32.Eip - 1) >= 0 #endif - ) // We have stopped at breakpoint, need to move address back + ) { // We have stopped at breakpoint, need to move address back #ifdef CPU_64 if(win64) t.context64.Rip--; else #endif t.context32.Eip--; + } context = t; } } diff --git a/uppsrc/ide/Debuggers/Exp.cpp b/uppsrc/ide/Debuggers/Exp.cpp index afa8aaf1d..cc2c87ef1 100644 --- a/uppsrc/ide/Debuggers/Exp.cpp +++ b/uppsrc/ide/Debuggers/Exp.cpp @@ -182,7 +182,7 @@ int64 Pdb::GetInt64(Pdb::Val v) GETINT(SINT8, int64); case FLT: case DBL: - if(v.fval >= _I64_MIN && v.fval <= _I64_MAX) + if(FitsInInt64(v.fval)) return (int64)v.fval; } ThrowError("Invalid operand"); diff --git a/uppsrc/ide/InstantSetup.cpp b/uppsrc/ide/InstantSetup.cpp index 2c3fa903e..be109901c 100644 --- a/uppsrc/ide/InstantSetup.cpp +++ b/uppsrc/ide/InstantSetup.cpp @@ -341,7 +341,7 @@ void InstantSetup() bmSet(bm, "RELEASE_LINKMODE", "0"); bmSet(bm, "RELEASE_OPTIONS", "-O3 "); bmSet(bm, "RELEASE_FLAGS", ""); - bmSet(bm, "RELEASE_LINK", "Wl,-pdb= -Wl,--stack,20000000"); + bmSet(bm, "RELEASE_LINK", "-Wl,--stack,20000000"); bmSet(bm, "DEBUGGER", "gdb"); bmSet(bm, "ALLOW_PRECOMPILED_HEADERS", "1"); bmSet(bm, "DISABLE_BLITZ", "");