From cddcc530147879e27bcf91025fc6728fb087d8e2 Mon Sep 17 00:00:00 2001 From: das Date: Tue, 30 Jun 2009 00:56:29 +0000 Subject: * generic/tkInt.h: add assert macros for clang static analyzer and redefine Tcl_Panic to assert after panic in clang PURIFY builds. * generic/tkImgPhInstance.c: small fixes to make clang static * generic/tkTextDisp.c: analyzer happier. * generic/tkConfig.c: add clang assert for false positives * generic/tkUndo.c: from static analyzer. --- ChangeLog | 13 +++++++++++++ generic/tkConfig.c | 3 ++- generic/tkImgPhInstance.c | 8 ++++++-- generic/tkInt.h | 16 +++++++++++++++- generic/tkTextDisp.c | 6 +++--- generic/tkUndo.c | 3 ++- 6 files changed, 41 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf9a18f..9df2df9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2009-06-30 Daniel Steffen + + * generic/tkInt.h: add assert macros for clang static + analyzer and redefine Tcl_Panic to + assert after panic in clang PURIFY + builds. + + * generic/tkImgPhInstance.c: small fixes to make clang static + * generic/tkTextDisp.c: analyzer happier. + + * generic/tkConfig.c: add clang assert for false positives + * generic/tkUndo.c: from static analyzer. + 2009-06-29 Daniel Steffen Merge of TkAqua Cocoa port diff --git a/generic/tkConfig.c b/generic/tkConfig.c index 27a48cb..ccdfdb0 100644 --- a/generic/tkConfig.c +++ b/generic/tkConfig.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkConfig.c,v 1.30 2009/02/03 23:55:47 nijtmans Exp $ + * RCS: @(#) $Id: tkConfig.c,v 1.31 2009/06/30 00:56:29 das Exp $ */ /* @@ -1435,6 +1435,7 @@ Tk_RestoreSavedOptions( if (specPtr->internalOffset >= 0) { register char *ptr = (char *) &savePtr->items[i].internalForm; + CLANG_ASSERT(internalPtr); switch (specPtr->type) { case TK_OPTION_BOOLEAN: *((int *) internalPtr) = *((int *) ptr); diff --git a/generic/tkImgPhInstance.c b/generic/tkImgPhInstance.c index 07fa0c0..816169e 100644 --- a/generic/tkImgPhInstance.c +++ b/generic/tkImgPhInstance.c @@ -17,7 +17,7 @@ * Department of Computer Science, * Australian National University. * - * RCS: @(#) $Id: tkImgPhInstance.c,v 1.2 2009/02/06 08:12:07 das Exp $ + * RCS: @(#) $Id: tkImgPhInstance.c,v 1.3 2009/06/30 00:56:29 das Exp $ */ #include "tkImgPhoto.h" @@ -337,7 +337,11 @@ TkImgPhotoGet( } XFree((char *) visInfoPtr); - sprintf(buf, ((mono) ? "%d": "%d/%d/%d"), nRed, nGreen, nBlue); + if (mono) { + sprintf(buf, "%d", nRed); + } else { + sprintf(buf, "%d/%d/%d", nRed, nGreen, nBlue); + } instancePtr->defaultPalette = Tk_GetUid(buf); /* diff --git a/generic/tkInt.h b/generic/tkInt.h index badad64..672160c 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: $Id: tkInt.h,v 1.103 2009/06/27 19:33:35 nijtmans Exp $ + * RCS: $Id: tkInt.h,v 1.104 2009/06/30 00:56:29 das Exp $ */ #ifndef _TKINT @@ -982,6 +982,20 @@ MODULE_SCOPE Tcl_HashTable tkPredefBitmapTable; #endif /* + * Macros for clang static analyzer + */ + +#if defined(PURIFY) && defined(__clang__) && !defined(CLANG_ASSERT) +#include +#define CLANG_ASSERT(x) assert(x) +#define Tcl_PanicEx Tcl_Panic +#undef Tcl_Panic +#define Tcl_Panic(f, ...) Tcl_PanicEx(f,##__VA_ARGS__); CLANG_ASSERT(0) +#elif !defined(CLANG_ASSERT) +#define CLANG_ASSERT(x) +#endif + +/* * The following magic value is stored in the "send_event" field of FocusIn * and FocusOut events. This allows us to separate "real" events coming from * the server from those that we generated. diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c index 4d20b50..164fc5d 100644 --- a/generic/tkTextDisp.c +++ b/generic/tkTextDisp.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkTextDisp.c,v 1.72 2008/12/09 21:22:56 dgp Exp $ + * RCS: @(#) $Id: tkTextDisp.c,v 1.73 2009/06/30 00:56:29 das Exp $ */ #include "tkInt.h" @@ -6721,10 +6721,10 @@ DlineXOfIndex( * coordinate. */ { register TkTextDispChunk *chunkPtr = dlPtr->chunkPtr; - int x; + int x = 0; if (byteIndex == 0 || chunkPtr == NULL) { - return 0; + return x; } /* diff --git a/generic/tkUndo.c b/generic/tkUndo.c index 8371f04..1150cef 100644 --- a/generic/tkUndo.c +++ b/generic/tkUndo.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkUndo.c,v 1.15 2009/02/06 08:12:07 das Exp $ + * RCS: @(#) $Id: tkUndo.c,v 1.16 2009/06/30 00:56:29 das Exp $ */ #include "tkInt.h" @@ -394,6 +394,7 @@ TkUndoSetDepth( prevelem = elem; elem = elem->next; } + CLANG_ASSERT(prevelem); prevelem->next = NULL; while (elem != NULL) { prevelem = elem; -- cgit v0.12