From 675e7a641a67eae2a27e5754e876d08d395c5da8 Mon Sep 17 00:00:00 2001
From: Tim Angus <tim@ngus.net>
Date: Fri, 21 Oct 2011 22:48:53 +0000
Subject: [PATCH] * clang support

---
 Makefile                     | 2 +-
 code/asm/snapvector.c        | 6 +++---
 code/botlib/be_ai_chat.c     | 2 +-
 code/qcommon/common.c        | 3 +++
 code/qcommon/q_platform.h    | 5 +++++
 code/qcommon/unzip.c         | 2 +-
 code/renderer/tr_model_iqm.c | 9 +++------
 code/renderer/tr_scene.c     | 2 +-
 9 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/Makefile b/Makefile
index 3bec57714..d0d3ba939 100644
--- a/Makefile
+++ b/Makefile
@@ -276,7 +276,7 @@ ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu"))
   endif
 
   BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \
-    -pipe -DUSE_ICON
+    -Wno-self-assign -pipe -DUSE_ICON
   CLIENT_CFLAGS += $(SDL_CFLAGS)
 
   OPTIMIZEVM = -O3 -funroll-loops -fomit-frame-pointer
diff --git a/code/asm/snapvector.c b/code/asm/snapvector.c
index a70a1069c..2ba248dfe 100644
--- a/code/asm/snapvector.c
+++ b/code/asm/snapvector.c
@@ -55,9 +55,9 @@ void qsnapvectorsse(vec3_t vec)
 
 #define QROUNDX87(src) \
 	"flds " src "\n" \
-	"fistp " src "\n" \
-	"fild " src "\n" \
-	"fstp " src "\n"	
+	"fistpl " src "\n" \
+	"fildl " src "\n" \
+	"fstpl " src "\n"	
 
 void qsnapvectorx87(vec3_t vec)
 {
diff --git a/code/botlib/be_ai_chat.c b/code/botlib/be_ai_chat.c
index 10950e9d8..cc489d557 100644
--- a/code/botlib/be_ai_chat.c
+++ b/code/botlib/be_ai_chat.c
@@ -1173,7 +1173,7 @@ bot_matchpiece_t *BotLoadMatchPieces(source_t *source, char *endtoken)
 	{
 		if (token.type == TT_NUMBER && (token.subtype & TT_INTEGER))
 		{
-			if (token.intvalue < 0 || token.intvalue >= MAX_MATCHVARIABLES)
+			if (token.intvalue >= MAX_MATCHVARIABLES)
 			{
 				SourceError(source, "can't have more than %d match variables\n", MAX_MATCHVARIABLES);
 				FreeSource(source);
diff --git a/code/qcommon/common.c b/code/qcommon/common.c
index 2e39731c0..4f9abfcac 100644
--- a/code/qcommon/common.c
+++ b/code/qcommon/common.c
@@ -2329,7 +2329,10 @@ A way to force a bus error for development reasons
 =================
 */
 static void Com_Crash_f( void ) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnull-dereference"
 	* ( int * ) 0 = 0x12345678;
+#pragma clang diagnostic pop
 }
 
 /*
diff --git a/code/qcommon/q_platform.h b/code/qcommon/q_platform.h
index 8bc2984ca..f2baf1c75 100644
--- a/code/qcommon/q_platform.h
+++ b/code/qcommon/q_platform.h
@@ -179,7 +179,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #define OS_STRING "kFreeBSD"
 #endif
 
+#ifdef __clang__
+#define ID_INLINE static inline
+#else
 #define ID_INLINE inline
+#endif
+
 #define PATH_SEP '/'
 
 #if defined __i386__
diff --git a/code/qcommon/unzip.c b/code/qcommon/unzip.c
index b307e98d4..128502ce0 100644
--- a/code/qcommon/unzip.c
+++ b/code/qcommon/unzip.c
@@ -1250,7 +1250,7 @@ extern int ZEXPORT unzReadCurrentFile  (file, buf, len)
         return UNZ_PARAMERROR;
 
 
-    if ((pfile_in_zip_read_info->read_buffer == NULL))
+    if (pfile_in_zip_read_info->read_buffer == NULL)
         return UNZ_END_OF_LIST_OF_FILE;
     if (len==0)
         return 0;
diff --git a/code/renderer/tr_model_iqm.c b/code/renderer/tr_model_iqm.c
index cad3aa6fd..98517d559 100644
--- a/code/renderer/tr_model_iqm.c
+++ b/code/renderer/tr_model_iqm.c
@@ -284,9 +284,9 @@ qboolean R_LoadIQM( model_t *mod, void *buffer, int filesize, const char *mod_na
 		LL( triangle->vertex[1] );
 		LL( triangle->vertex[2] );
 		
-		if( triangle->vertex[0] < 0 || triangle->vertex[0] > header->num_vertexes ||
-		    triangle->vertex[1] < 0 || triangle->vertex[1] > header->num_vertexes ||
-		    triangle->vertex[2] < 0 || triangle->vertex[2] > header->num_vertexes ) {
+		if( triangle->vertex[0] > header->num_vertexes ||
+		    triangle->vertex[1] > header->num_vertexes ||
+		    triangle->vertex[2] > header->num_vertexes ) {
 			return qfalse;
 		}
 	}
@@ -323,9 +323,7 @@ qboolean R_LoadIQM( model_t *mod, void *buffer, int filesize, const char *mod_na
 		    mesh->first_vertex + mesh->num_vertexes > header->num_vertexes ||
 		    mesh->first_triangle >= header->num_triangles ||
 		    mesh->first_triangle + mesh->num_triangles > header->num_triangles ||
-		    mesh->name < 0 ||
 		    mesh->name >= header->num_text ||
-		    mesh->material < 0 ||
 		    mesh->material >= header->num_text ) {
 			return qfalse;
 		}
@@ -354,7 +352,6 @@ qboolean R_LoadIQM( model_t *mod, void *buffer, int filesize, const char *mod_na
 
 		if( joint->parent < -1 ||
 		    joint->parent >= (int)header->num_joints ||
-		    joint->name < 0 ||
 		    joint->name >= (int)header->num_text ) {
 			return qfalse;
 		}
diff --git a/code/renderer/tr_scene.c b/code/renderer/tr_scene.c
index 34e4141d3..94910d611 100644
--- a/code/renderer/tr_scene.c
+++ b/code/renderer/tr_scene.c
@@ -219,7 +219,7 @@ void RE_AddRefEntityToScene( const refEntity_t *ent ) {
 		}
 		return;
 	}
-	if ( ent->reType < 0 || ent->reType >= RT_MAX_REF_ENTITY_TYPE ) {
+	if ( (int)ent->reType < 0 || ent->reType >= RT_MAX_REF_ENTITY_TYPE ) {
 		ri.Error( ERR_DROP, "RE_AddRefEntityToScene: bad reType %i", ent->reType );
 	}
 
