[Scummvm-git-logs] scummvm master -> 843776dd851c92c9f3525610d3bdbafda6454478

sev- noreply at scummvm.org
Sun Dec 25 15:32:02 UTC 2022


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
e280186a8c ALL: VS warning cleanup
843776dd85 DEVTOOLS: Promote numerous VS warnings to errors.


Commit: e280186a8c7ee79a28c1716fe9198ef77f2d811f
    https://github.com/scummvm/scummvm/commit/e280186a8c7ee79a28c1716fe9198ef77f2d811f
Author: elasota (ejlasota at gmail.com)
Date: 2022-12-25T16:31:57+01:00

Commit Message:
ALL: VS warning cleanup

Changed paths:
    common/math.h
    common/ptr.h
    engines/buried/environ/agent3_lair.cpp
    engines/director/resource.cpp
    engines/freescape/language/instruction.cpp
    engines/glk/archetype/archetype.cpp
    engines/glk/archetype/archetype.h
    engines/glk/comprehend/comprehend.cpp
    engines/glk/comprehend/comprehend.h
    engines/glk/scott/scott.cpp
    engines/glk/scott/scott.h
    engines/grim/lua/lstx.cpp
    engines/hpl1/engine/graphics/Material_BaseLight.cpp
    engines/hpl1/engine/graphics/Material_Fallback01_BaseLight.cpp
    engines/hpl1/engine/graphics/Material_Fallback02_BaseLight.cpp
    engines/hpl1/engine/libraries/newton/core/dgDelaunayTetrahedralization.cpp
    engines/hpl1/engine/libraries/newton/core/dgQuaternion.cpp
    engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
    engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexHull.cpp
    engines/hpl1/engine/libraries/newton/physics/dgMeshEffect.cpp
    engines/hpl1/engine/scene/Light3D.cpp
    engines/hpl1/engine/scene/World2D.cpp
    engines/hpl1/opengl.h
    engines/hpl1/penumbra-overture/GameMusicHandler.cpp
    engines/hypno/spider/talk.cpp
    engines/icb/protocol.h
    engines/icb/stagedraw_pc_poly.cpp
    engines/mads/mps_installer.cpp
    engines/myst3/puzzles.cpp
    engines/playground3d/gfx_opengl.cpp
    engines/playground3d/gfx_opengl_shaders.cpp
    engines/playground3d/gfx_tinygl.cpp
    engines/playground3d/playground3d.cpp
    engines/saga/animation.cpp
    engines/saga2/actor.cpp
    engines/saga2/actor.h
    engines/saga2/effects.cpp
    engines/scumm/actor.cpp
    engines/stark/gfx/renderentry.cpp
    engines/tony/mpal/expr.cpp
    engines/tony/mpal/expr.h
    engines/ultima/nuvie/gui/widgets/msg_scroll.cpp
    engines/ultima/nuvie/gui/widgets/msg_scroll.h
    engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
    engines/wintermute/wintermute.cpp


diff --git a/common/math.h b/common/math.h
index f6b4ad38cc3..ef2ce4f95b2 100644
--- a/common/math.h
+++ b/common/math.h
@@ -52,11 +52,11 @@
 #endif
 
 #ifndef FLT_MIN
-	#define FLT_MIN 1E-37
+	#define FLT_MIN 1E-37f
 #endif
 
 #ifndef FLT_MAX
-	#define FLT_MAX 1E+37
+	#define FLT_MAX 1E+37f
 #endif
 
 namespace Common {
diff --git a/common/ptr.h b/common/ptr.h
index 639c9493ce6..472b41ca668 100644
--- a/common/ptr.h
+++ b/common/ptr.h
@@ -734,6 +734,82 @@ private:
 	bool                  _isvalid;
 };
 
+
+/**
+ * UnalignedPtr: Allows pointers to and access of memory addresses where the underlying data
+ * doesn't have proper alignment.
+ */
+
+#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM) || defined(_M_ARM64))
+
+template<class T>
+class UnalignedPtr {
+public:
+	UnalignedPtr();
+	UnalignedPtr(__unaligned T *ptr);
+
+	T load() const;
+	void store(const T &value) const;
+
+private:
+	__unaligned T *_ptr;
+};
+
+template<class T>
+UnalignedPtr<T>::UnalignedPtr() : _ptr(nullptr) {
+}
+
+template<class T>
+UnalignedPtr<T>::UnalignedPtr(__unaligned T *ptr) : _ptr(ptr) {
+}
+
+template<class T>
+T UnalignedPtr<T>::load() const {
+	return *_ptr;
+}
+
+template<class T>
+void UnalignedPtr<T>::store(const T &value) const {
+	*_ptr = value;
+}
+
+#else
+
+template<class T>
+class UnalignedPtr {
+public:
+	UnalignedPtr();
+	UnalignedPtr(T *ptr);
+
+	T load() const;
+	void store(const T &value) const;
+
+private:
+	T *_ptr;
+};
+
+template<class T>
+UnalignedPtr<T>::UnalignedPtr() : _ptr(nullptr) {
+}
+
+template<class T>
+UnalignedPtr<T>::UnalignedPtr(T *ptr) : _ptr(ptr) {
+}
+
+template<class T>
+T UnalignedPtr<T>::load() const {
+	T result;
+	memcpy(&result, _ptr, sizeof(T));
+	return result;
+}
+
+template<class T>
+void UnalignedPtr<T>::store(const T &value) const {
+	memcpy(_ptr, &value, sizeof(T));
+}
+
+#endif
+
 /** @} */
 
 } // End of namespace Common
diff --git a/engines/buried/environ/agent3_lair.cpp b/engines/buried/environ/agent3_lair.cpp
index aee649d7c4e..8bef71c0b8f 100644
--- a/engines/buried/environ/agent3_lair.cpp
+++ b/engines/buried/environ/agent3_lair.cpp
@@ -80,7 +80,7 @@ int LairEntry::postEnterRoom(Window *viewWindow, const Location &priorLocation)
 
 	if (((SceneViewWindow *)viewWindow)->getGlobalFlags().alRestoreSkipAgent3Initial == 1) {
 		// Start new secondary ambient
-		_vm->_sound->setSecondaryAmbientSound(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, 14), 64);
+		_vm->_sound->setSecondaryAmbientSound(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, 14), true, 64);
 
 		_staticData.cycleStartFrame = 0;
 		_staticData.cycleFrameCount = 54;
@@ -180,7 +180,7 @@ int LairEntry::postEnterRoom(Window *viewWindow, const Location &priorLocation)
 	_currentSoundID = _vm->_sound->playSoundEffect(_vm->getFilePath(IDS_AGENT3_VIRUS_SOUND_BASE + 6), 128, false, true);
 
 	// Start new secondary ambient
-	_vm->_sound->setSecondaryAmbientSound(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, 14), 64);
+	_vm->_sound->setSecondaryAmbientSound(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, 14), true, 64);
 
 	_passwordIndex = 0;
 	_stepDelay = 0;
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 70b379f18ea..44bbcad45a1 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -285,7 +285,7 @@ void Window::loadEXE(const Common::String movie) {
 }
 
 void Window::loadEXEv3(Common::SeekableReadStream *stream) {
-	uint32 mmmSize;
+	uint32 mmmSize = 0;
 	Common::String mmmFileName;
 	Common::String directoryName;
 
diff --git a/engines/freescape/language/instruction.cpp b/engines/freescape/language/instruction.cpp
index 1f6146477bb..56a4d92f1c5 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -215,9 +215,11 @@ void FreescapeEngine::executeSPFX(FCLInstruction &instruction) {
 		if (src == 0 && dst >= 2 && dst <= 5) {
 			_currentArea->remapColor(dst, 1);
 			return;
-		} if (src == 0) {
+		}
+
+		if (src == 0) {
 			color = dst;
-		} else if (src > 0) {
+		} else {
 
 			switch (src) {
 			case 1:
@@ -268,7 +270,7 @@ bool FreescapeEngine::executeEndIfVisibilityIsEqual(FCLInstruction &instruction)
 		}
 	}
 
-	return (obj->isInvisible() == value);
+	return (obj->isInvisible() == (value != 0));
 }
 
 bool FreescapeEngine::executeEndIfNotEqual(FCLInstruction &instruction) {
diff --git a/engines/glk/archetype/archetype.cpp b/engines/glk/archetype/archetype.cpp
index 6eca6fcee14..f972e6e39d7 100644
--- a/engines/glk/archetype/archetype.cpp
+++ b/engines/glk/archetype/archetype.cpp
@@ -131,10 +131,10 @@ void Archetype::interpret() {
 	cleanup(result);
 }
 
-void Archetype::write(const String fmt, ...) {
+void Archetype::write_internal(const String *fmt, ...) {
 	va_list ap;
 	va_start(ap, fmt);
-	Common::String s = Common::String::vformat(fmt.c_str(), ap);
+	Common::String s = Common::String::vformat(fmt->c_str(), ap);
 	va_end(ap);
 
 	_lastOutputText = s;
@@ -143,10 +143,10 @@ void Archetype::write(const String fmt, ...) {
 		glk_put_buffer(s.c_str(), s.size());
 }
 
-void Archetype::writeln(const String fmt, ...) {
+void Archetype::writeln_internal(const String *fmt, ...) {
 	va_list ap;
 	va_start(ap, fmt);
-	Common::String s = Common::String::vformat(fmt.c_str(), ap);
+	Common::String s = Common::String::vformat(fmt->c_str(), ap);
 	va_end(ap);
 
 	s += '\n';
diff --git a/engines/glk/archetype/archetype.h b/engines/glk/archetype/archetype.h
index f55c5c4c6b5..5f1736729b6 100644
--- a/engines/glk/archetype/archetype.h
+++ b/engines/glk/archetype/archetype.h
@@ -177,12 +177,14 @@ public:
 	/**
 	 * Write some text to the screen
 	 */
-	void write(const String fmt, ...);
+	template<class... TParam>
+	void write(const String &fmt, TParam... args);
 
 	/**
 	 * Write a line to the screen
 	 */
-	void writeln(const String fmt, ...);
+	template<class... TParam>
+	void writeln(const String &fmt, TParam... args);
 	void writeln() { writeln(""); }
 
 	/**
@@ -194,8 +196,22 @@ public:
 	 * Read in a single key
 	 */
 	char readKey();
+
+private:
+	void write_internal(const String *fmt, ...);
+	void writeln_internal(const String *fmt, ...);
 };
 
+template<class... TParam>
+inline void Archetype::write(const String &format, TParam... param) {
+	return write_internal(&format, Common::forward<TParam>(param)...);
+}
+
+template<class... TParam>
+inline void Archetype::writeln(const String &format, TParam... param) {
+	return writeln_internal(&format, Common::forward<TParam>(param)...);
+}
+
 extern Archetype *g_vm;
 
 } // End of namespace Archetype
diff --git a/engines/glk/comprehend/comprehend.cpp b/engines/glk/comprehend/comprehend.cpp
index 4e32e096e92..58b424cc448 100644
--- a/engines/glk/comprehend/comprehend.cpp
+++ b/engines/glk/comprehend/comprehend.cpp
@@ -132,12 +132,12 @@ void Comprehend::print(const char *fmt, ...) {
 	glk_put_string_stream(glk_window_get_stream(_bottomWindow), msg.c_str());
 }
 
-void Comprehend::print(const Common::U32String fmt, ...) {
+void Comprehend::print_u32_internal(const Common::U32String *fmt, ...) {
 	Common::U32String outputMsg;
 
 	va_list argp;
 	va_start(argp, fmt);
-	Common::U32String::vformat(fmt.begin(), fmt.end(), outputMsg, argp);
+	Common::U32String::vformat(fmt->begin(), fmt->end(), outputMsg, argp);
 	va_end(argp);
 
 	glk_put_string_stream_uni(glk_window_get_stream(_bottomWindow), outputMsg.u32_str());
diff --git a/engines/glk/comprehend/comprehend.h b/engines/glk/comprehend/comprehend.h
index 8cdd72d10e4..311fdc6450c 100644
--- a/engines/glk/comprehend/comprehend.h
+++ b/engines/glk/comprehend/comprehend.h
@@ -133,7 +133,8 @@ public:
 	/**
 	 * Print unicode-string to the buffer window
 	 */
-	void print(const Common::U32String fmt, ...);
+	template<class... TParam>
+	void print(const Common::U32String &fmt, TParam... param);
 
 	/**
 	 * Prints the room description in the room description window
@@ -216,8 +217,16 @@ public:
 	 * Returns true if an input line is currently active
 	 */
 	bool isInputLineActive() const;
+
+private:
+	void print_u32_internal(const Common::U32String *fmt, ...);
 };
 
+template<class... TParam>
+void Comprehend::print(const Common::U32String &fmt, TParam... param) {
+	print_u32_internal(&fmt, Common::forward<TParam>(param)...);
+}
+
 extern Comprehend *g_comprehend;
 
 } // End of namespace Comprehend
diff --git a/engines/glk/scott/scott.cpp b/engines/glk/scott/scott.cpp
index b3b9fd1222a..eb66cd9e37c 100644
--- a/engines/glk/scott/scott.cpp
+++ b/engines/glk/scott/scott.cpp
@@ -240,13 +240,13 @@ void Scott::display(winid_t w, const char *fmt, ...) {
 		glk_put_string_stream(_G(_transcript), msg.c_str());
 }
 
-void Scott::display(winid_t w, const Common::U32String fmt, ...) {
+void Scott::display_u32_internal(winid_t w, const Common::U32String *fmt, ...) {
 	Common::U32String msg;
 
 	va_list ap;
 
 	va_start(ap, fmt);
-	Common::U32String::vformat(fmt.begin(), fmt.end(), msg, ap);
+	Common::U32String::vformat(fmt->begin(), fmt->end(), msg, ap);
 	va_end(ap);
 
 	glk_put_string_stream_uni(glk_window_get_stream(w), msg.u32_str());
diff --git a/engines/glk/scott/scott.h b/engines/glk/scott/scott.h
index 7837768150f..2aa769c2fb5 100644
--- a/engines/glk/scott/scott.h
+++ b/engines/glk/scott/scott.h
@@ -198,7 +198,7 @@ public:
 	void output(const Common::U32String &a);
 	void outputNumber(int a);
 	void display(winid_t w, const char *fmt, ...);
-	void display(winid_t w, const Common::U32String fmt, ...);
+	template<class... TParam> void display(winid_t w, const Common::U32String &fmt, TParam... param);
 	void fatal(const char *x);
 	void hitEnter();
 	void updates(event_t ev);
@@ -251,8 +251,16 @@ public:
 	 * in the Quetzal save file that will be created
 	 */
 	Common::Error writeGameData(Common::WriteStream *ws) override;
+
+private:
+	void display_u32_internal(winid_t w, const Common::U32String *fmt, ...);
 };
 
+template<class... TParam>
+inline void Scott::display(winid_t w, const Common::U32String &fmt, TParam... param) {
+	display_u32_internal(w, &fmt, Common::forward<TParam>(param)...);
+}
+
 extern Scott *g_scott;
 
 } // End of namespace Scott
diff --git a/engines/grim/lua/lstx.cpp b/engines/grim/lua/lstx.cpp
index c3fae583d6a..cf4021b4021 100644
--- a/engines/grim/lua/lstx.cpp
+++ b/engines/grim/lua/lstx.cpp
@@ -980,6 +980,9 @@ int yyparse() {
 	/* Push a new state, which is found in  yystate  .  */
 	/* In all cases, when you get here, the value and location stacks
 	have just been pushed. so pushing a state here evens the stacks.  */
+
+	memset(&yylval, 0, sizeof(yylval));
+
 yynewstate:
 
 	*++yyssp = yystate;
diff --git a/engines/hpl1/engine/graphics/Material_BaseLight.cpp b/engines/hpl1/engine/graphics/Material_BaseLight.cpp
index 7e73e6681c4..894395635a2 100644
--- a/engines/hpl1/engine/graphics/Material_BaseLight.cpp
+++ b/engines/hpl1/engine/graphics/Material_BaseLight.cpp
@@ -162,8 +162,10 @@ iGpuProgram *iMaterial_BaseLight::getGpuProgram(const eMaterialRenderType aType,
 				program = eBaseLightProgram_Point1;
 			else if (apLight->GetLightType() == eLight3DType_Spot)
 				program = eBaseLightProgram_Spot1;
-			else
+			else {
 				assert(false);
+				program = static_cast<eBaseLightProgram>(0);
+			}
 		}
 		return _shaders[program];
 	} else if (aType == eMaterialRenderType_Diffuse) {
diff --git a/engines/hpl1/engine/graphics/Material_Fallback01_BaseLight.cpp b/engines/hpl1/engine/graphics/Material_Fallback01_BaseLight.cpp
index d4881aed065..0353d78e335 100644
--- a/engines/hpl1/engine/graphics/Material_Fallback01_BaseLight.cpp
+++ b/engines/hpl1/engine/graphics/Material_Fallback01_BaseLight.cpp
@@ -111,7 +111,7 @@ iMaterial_Fallback01_BaseLight::~iMaterial_Fallback01_BaseLight() {
 //-----------------------------------------------------------------------
 
 iGpuProgram *iMaterial_Fallback01_BaseLight::getGpuProgram(const eMaterialRenderType aType, const int alPass, iLight3D *apLight) {
-	eBaseLightProgram program;
+	eBaseLightProgram program = eBaseLightProgram_Point1;
 	if (apLight) {
 		if (apLight->GetLightType() == eLight3DType_Point)
 			program = eBaseLightProgram_Point1;
diff --git a/engines/hpl1/engine/graphics/Material_Fallback02_BaseLight.cpp b/engines/hpl1/engine/graphics/Material_Fallback02_BaseLight.cpp
index 3ac7f3d3a8f..132e0e51b54 100644
--- a/engines/hpl1/engine/graphics/Material_Fallback02_BaseLight.cpp
+++ b/engines/hpl1/engine/graphics/Material_Fallback02_BaseLight.cpp
@@ -103,7 +103,7 @@ iMaterial_Fallback02_BaseLight::~iMaterial_Fallback02_BaseLight() {
 //-----------------------------------------------------------------------
 
 iGpuProgram *iMaterial_Fallback02_BaseLight::getGpuProgram(const eMaterialRenderType aType, const int alPass, iLight3D *apLight) {
-	eBaseLightProgram program;
+	eBaseLightProgram program = eBaseLightProgram_Point1;
 	if (apLight) {
 		if (apLight->GetLightType() == eLight3DType_Point)
 			program = eBaseLightProgram_Point1;
diff --git a/engines/hpl1/engine/libraries/newton/core/dgDelaunayTetrahedralization.cpp b/engines/hpl1/engine/libraries/newton/core/dgDelaunayTetrahedralization.cpp
index 290eadc3b98..65b95bae39a 100644
--- a/engines/hpl1/engine/libraries/newton/core/dgDelaunayTetrahedralization.cpp
+++ b/engines/hpl1/engine/libraries/newton/core/dgDelaunayTetrahedralization.cpp
@@ -144,8 +144,8 @@ void dgDelaunayTetrahedralization::SortVertexArray() {
 			dgInt32 index = face.m_otherVertex;
 			face.m_otherVertex = points[index].m_index;
 			for (dgInt32 j = 0; j < 3; j++) {
-				dgInt32 index = face.m_index[j];
-				face.m_index[j] = points[index].m_index;
+				dgInt32 ptindex = face.m_index[j];
+				face.m_index[j] = points[ptindex].m_index;
 			}
 		}
 	}
diff --git a/engines/hpl1/engine/libraries/newton/core/dgQuaternion.cpp b/engines/hpl1/engine/libraries/newton/core/dgQuaternion.cpp
index c9ac97b776a..8258774feea 100644
--- a/engines/hpl1/engine/libraries/newton/core/dgQuaternion.cpp
+++ b/engines/hpl1/engine/libraries/newton/core/dgQuaternion.cpp
@@ -71,8 +71,8 @@ dgQuaternion::dgQuaternion(const dgMatrix &matrix) {
 #ifdef _DEBUG
 	dgMatrix tmp(*this, matrix.m_posit);
 	dgMatrix unitMatrix(tmp * matrix.Inverse());
-	for (dgInt32 i = 0; i < 4; i++) {
-		dgFloat32 err = dgAbsf(unitMatrix[i][i] - dgFloat32(1.0f));
+	for (dgInt32 di = 0; di < 4; di++) {
+		dgFloat32 err = dgAbsf(unitMatrix[di][di] - dgFloat32(1.0f));
 		NEWTON_ASSERT(err < dgFloat32(1.0e-2f));
 	}
 
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
index 3cc8722c501..b731c8c6301 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
@@ -1515,8 +1515,8 @@ dgInt32 dgCollisionConvex::CalculatePlaneIntersection(const dgVector &normal,
 			for (dgInt32 i = 0; i < m_edgeCount; i++) {
 				ptr = &m_simplex[i];
 				side0 = plane.Evalue(m_vertex[ptr->m_vertex]);
-				dgFloat32 side1 = plane.Evalue(m_vertex[ptr->m_twin->m_vertex]);
-				if ((side1 < dgFloat32(0.0f)) && (side0 > dgFloat32(0.0f))) {
+				dgFloat32 dside1 = plane.Evalue(m_vertex[ptr->m_twin->m_vertex]);
+				if ((dside1 < dgFloat32(0.0f)) && (side0 > dgFloat32(0.0f))) {
 					NEWTON_ASSERT(0);
 					firstEdge = ptr;
 					break;
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexHull.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexHull.cpp
index 7943b2d8eff..c5a02ff8ff4 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexHull.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexHull.cpp
@@ -210,12 +210,12 @@ dgBigVector dgCollisionConvexHull::FaceNormal(const dgEdge *face,
 	dgBigVector e0(
 	    pool[edge->m_incidentVertex] - pool[edge->m_prev->m_incidentVertex]);
 	do {
-		dgBigVector e1(
+		dgBigVector de1(
 		    pool[edge->m_next->m_incidentVertex] - pool[edge->m_incidentVertex]);
-		dgBigVector n1(e0 * e1);
+		dgBigVector n1(e0 * de1);
 		dgFloat64 x = normal % n1;
 		NEWTON_ASSERT(x > -dgFloat64(0.01f));
-		e0 = e1;
+		e0 = de1;
 		edge = edge->m_next;
 	} while (edge != face);
 #endif
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgMeshEffect.cpp b/engines/hpl1/engine/libraries/newton/physics/dgMeshEffect.cpp
index baab1af4856..2620114372f 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgMeshEffect.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgMeshEffect.cpp
@@ -3962,21 +3962,21 @@ void dgMeshEffect::ClipMesh(const dgMeshEffectSolidTree *const clipper,
 					for (dgList<dgMeshTreeCSGFace *>::dgListNode *node1 =
 					            faceList.GetFirst();
 					        node1; node1 = node1->GetNext()) {
-						dgMeshTreeCSGFace *const face = node1->GetInfo();
+						dgMeshTreeCSGFace *const dface = node1->GetInfo();
 						NEWTON_ASSERT(
-						    clipper->GetFaceSide(face) == dgMeshEffectSolidTree::m_empty);
+						    clipper->GetFaceSide(dface) == dgMeshEffectSolidTree::m_empty);
 					}
 #endif
 					frontMesh->AddPolygon(count, &facePoints[0].m_vertex.m_x,
 					                      sizeof(dgVertexAtribute), dgFastInt(facePoints[0].m_material));
 				} else {
 #ifdef _DEBUG
-					for (dgList<dgMeshTreeCSGFace *>::dgListNode *node1 =
+					for (dgList<dgMeshTreeCSGFace *>::dgListNode *dnode1 =
 					            faceList.GetFirst();
-					        node1; node1 = node1->GetNext()) {
-						dgMeshTreeCSGFace *const face = node1->GetInfo();
+					        dnode1; dnode1 = dnode1->GetNext()) {
+						dgMeshTreeCSGFace *const dface = dnode1->GetInfo();
 						NEWTON_ASSERT(
-						    clipper->GetFaceSide(face) == dgMeshEffectSolidTree::m_solid);
+						    clipper->GetFaceSide(dface) == dgMeshEffectSolidTree::m_solid);
 					}
 #endif
 					backMesh->AddPolygon(count, &facePoints[0].m_vertex.m_x,
diff --git a/engines/hpl1/engine/scene/Light3D.cpp b/engines/hpl1/engine/scene/Light3D.cpp
index 83ab9dd57a7..06bc3109597 100644
--- a/engines/hpl1/engine/scene/Light3D.cpp
+++ b/engines/hpl1/engine/scene/Light3D.cpp
@@ -668,7 +668,7 @@ void iLight3D::RenderShadow(iRenderable *apObject, cRenderSettings *apRenderSett
 		const cTriEdge &Edge = pEdges[edge];
 
 		const cTriangleData *pTri1 = &pTriangles[Edge.tri1];
-		const cTriangleData *pTri2;
+		const cTriangleData *pTri2 = nullptr;
 		if (Edge.invert_tri2 == false)
 			pTri2 = &pTriangles[Edge.tri2];
 
diff --git a/engines/hpl1/engine/scene/World2D.cpp b/engines/hpl1/engine/scene/World2D.cpp
index 880107d917a..2d6c59d23f3 100644
--- a/engines/hpl1/engine/scene/World2D.cpp
+++ b/engines/hpl1/engine/scene/World2D.cpp
@@ -757,7 +757,7 @@ int cWorld2D::LoadTileData(cTile *apTile, tString *asData, int alStart) {
 	int lCount = alStart;
 	int lStart = lCount;
 	int lValType = 0;
-	int lSet;
+	int lSet = 0;
 	int lNum;
 
 	while (true) {
diff --git a/engines/hpl1/opengl.h b/engines/hpl1/opengl.h
index 99a6593d706..1d26a105725 100644
--- a/engines/hpl1/opengl.h
+++ b/engines/hpl1/opengl.h
@@ -44,7 +44,7 @@ Common::ScopedPtr<Graphics::Surface> createGLViewportScreenshot();
 }
 
 #define GL_CHECK(x) {x; ::Hpl1::checkOGLErrors(__func__, __LINE__);}
-#define GL_CHECK_FN() GL_CHECK()
+#define GL_CHECK_FN() {::Hpl1::checkOGLErrors(__func__, __LINE__);}
 
 #endif // USE_OPENGL
 #endif // HPL1_OPENGL_H
diff --git a/engines/hpl1/penumbra-overture/GameMusicHandler.cpp b/engines/hpl1/penumbra-overture/GameMusicHandler.cpp
index d506ab6384a..9f7ca5ea0c1 100644
--- a/engines/hpl1/penumbra-overture/GameMusicHandler.cpp
+++ b/engines/hpl1/penumbra-overture/GameMusicHandler.cpp
@@ -125,7 +125,7 @@ void cGameMusicHandler::Update(float afTimeStep) {
 		}
 		// Music playing
 		else {
-			bool bFound;
+			bool bFound = false;
 			tGameEnemyIterator enemyIt = mpInit->mpMapHandler->GetGameEnemyIterator();
 			while (enemyIt.HasNext()) {
 				iGameEnemy *pEnemy = enemyIt.Next();
diff --git a/engines/hypno/spider/talk.cpp b/engines/hypno/spider/talk.cpp
index b5ef70aa527..4fd05b095dc 100644
--- a/engines/hypno/spider/talk.cpp
+++ b/engines/hypno/spider/talk.cpp
@@ -81,7 +81,7 @@ void SpiderEngine::showConversation() {
 	for (Actions::const_iterator itt = _conversation.begin(); itt != _conversation.end(); ++itt) {
 		Talk *a = (Talk *)*itt;
 		if (a->active && !skipRepeated) {
-			uint32 frame;
+			uint32 frame = 0;
 			Common::String path;
 			for (TalkCommands::const_iterator it = a->commands.begin(); it != a->commands.end(); ++it) {
 				if (it->command == "F") {
diff --git a/engines/icb/protocol.h b/engines/icb/protocol.h
index 23116ea0886..dce9d264108 100644
--- a/engines/icb/protocol.h
+++ b/engines/icb/protocol.h
@@ -71,6 +71,8 @@ typedef struct {
 	uint16 blend;
 } _animHeader;
 
+#pragma pack(pop)
+
 _frameHeader *FetchFrameHeader(uint8 *animFile, uint16 frameNo); // (25sep96JEL)
 
 } // End of namespace ICB
diff --git a/engines/icb/stagedraw_pc_poly.cpp b/engines/icb/stagedraw_pc_poly.cpp
index 8addc4e4e31..4b158efb32a 100644
--- a/engines/icb/stagedraw_pc_poly.cpp
+++ b/engines/icb/stagedraw_pc_poly.cpp
@@ -523,7 +523,7 @@ void drawObjects(SDactor &act, PSXLampList &lamplist, PSXrgb *pAmbient, PSXShade
 int32 drawSpecialObjects(SDactor &actor, MATRIXPC *local2screen, int32 brightness, SVECTOR *minBBox, SVECTOR *maxBBox) {
 	// Shooting ?
 	int32 mflash = 0;
-	SVECTOR mpos;
+	SVECTOR mpos = {0, 0, 0, 0};
 
 	_mega *&mega = actor.log->mega;
 	_vox_image *&vox = actor.log->voxel_info;
diff --git a/engines/mads/mps_installer.cpp b/engines/mads/mps_installer.cpp
index d6c59ad7a66..37261ce0f15 100644
--- a/engines/mads/mps_installer.cpp
+++ b/engines/mads/mps_installer.cpp
@@ -131,18 +131,22 @@ Common::SharedArchiveContents MpsInstaller::readContentsForPath(const Common::St
 		uncompressedSize = desc._compressedSize;
 		compressedBuf = nullptr;
 		break;
-	case 1:
-		Common::MemoryReadStream compressedReadStream(compressedBuf, desc._compressedSize);
-		uncompressedBuf = new byte[uncompressedSize];
-		if (!Common::decompressDCL(&compressedReadStream, uncompressedBuf, desc._compressedSize, uncompressedSize)) {
+	case 1: {
+			Common::MemoryReadStream compressedReadStream(compressedBuf, desc._compressedSize);
+			uncompressedBuf = new byte[uncompressedSize];
+			if (!Common::decompressDCL(&compressedReadStream, uncompressedBuf, desc._compressedSize, uncompressedSize)) {
+				delete[] compressedBuf;
+				delete[] uncompressedBuf;
+				error("Unable to decompress %s", desc._fileName.c_str());
+				return Common::SharedArchiveContents();
+			}
 			delete[] compressedBuf;
-			delete[] uncompressedBuf;
-			error("Unable to decompress %s", desc._fileName.c_str());
-			return Common::SharedArchiveContents();
-		}
-		delete[] compressedBuf;
-		compressedBuf = nullptr;
+			compressedBuf = nullptr;
 
+		} break;
+	default:
+		error("Unsupported compression algorithm");
+		uncompressedBuf = nullptr;
 		break;
 	}
 
diff --git a/engines/myst3/puzzles.cpp b/engines/myst3/puzzles.cpp
index 5008f2bb9be..05485522328 100644
--- a/engines/myst3/puzzles.cpp
+++ b/engines/myst3/puzzles.cpp
@@ -228,7 +228,7 @@ void Puzzles::leversBall(int16 var) {
 
 	const NewPosition *position = nullptr;
 	for (uint i = 0; i < ARRAYSIZE(move->p); i++)
-		if (move->p[i].newLeft == newLeverLeft && move->p[i].newRight == newLeverRight) {
+		if (move->p[i].newLeft == (newLeverLeft != 0) && move->p[i].newRight == (newLeverRight != 0)) {
 			position = &move->p[i];
 			break;
 		}
diff --git a/engines/playground3d/gfx_opengl.cpp b/engines/playground3d/gfx_opengl.cpp
index 12fcc63afbb..f4600a34d85 100644
--- a/engines/playground3d/gfx_opengl.cpp
+++ b/engines/playground3d/gfx_opengl.cpp
@@ -269,11 +269,11 @@ void OpenGLRenderer::drawInViewport() {
 	glDisableClientState(GL_VERTEX_ARRAY);
 
 	glPushMatrix();
-	_pos.x() += 0.01;
-	_pos.y() += 0.01;
+	_pos.x() += 0.01f;
+	_pos.y() += 0.01f;
 	if (_pos.x() >= 1.0f) {
-		_pos.x() = -1.0;
-		_pos.y() = -1.0;
+		_pos.x() = -1.0f;
+		_pos.y() = -1.0f;
 	}
 	glTranslatef(_pos.x(), _pos.y(), 0);
 
@@ -314,7 +314,7 @@ void OpenGLRenderer::drawRgbaTexture() {
 	glEnableClientState(GL_VERTEX_ARRAY);
 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 
-	glTranslatef(-0.8, 0.8, 0);
+	glTranslatef(-0.8f, 0.8f, 0);
 
 	glVertexPointer(2, GL_FLOAT, 2 * sizeof(GLfloat), bitmapVertices);
 	glTexCoordPointer(2, GL_FLOAT, 2 * sizeof(GLfloat), textCords);
diff --git a/engines/playground3d/gfx_opengl_shaders.cpp b/engines/playground3d/gfx_opengl_shaders.cpp
index ee35a6f818c..ff279fc6942 100644
--- a/engines/playground3d/gfx_opengl_shaders.cpp
+++ b/engines/playground3d/gfx_opengl_shaders.cpp
@@ -216,32 +216,32 @@ void ShaderRenderer::drawRgbaTexture() {
 
 	_bitmapShader->use();
 
-	offset.setX(-0.8);
-	offset.setY(0.8);
+	offset.setX(-0.8f);
+	offset.setY(0.8f);
 	_bitmapShader->setUniform("offsetXY", offset);
 	glBindTexture(GL_TEXTURE_2D, _textureRgbaId[0]);
 	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 
-	offset.setX(-0.3);
-	offset.setY(0.8);
+	offset.setX(-0.3f);
+	offset.setY(0.8f);
 	_bitmapShader->setUniform("offsetXY", offset);
 	glBindTexture(GL_TEXTURE_2D, _textureRgbId[0]);
 	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 
-	offset.setX(0.2);
-	offset.setY(0.8);
+	offset.setX(0.2f);
+	offset.setY(0.8f);
 	_bitmapShader->setUniform("offsetXY", offset);
 	glBindTexture(GL_TEXTURE_2D, _textureRgb565Id[0]);
 	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 
-	offset.setX(0.7);
-	offset.setY(0.8);
+	offset.setX(0.7f);
+	offset.setY(0.8f);
 	_bitmapShader->setUniform("offsetXY", offset);
 	glBindTexture(GL_TEXTURE_2D, _textureRgba5551Id[0]);
 	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 
-	offset.setX(-0.8);
-	offset.setY(0.2);
+	offset.setX(-0.8f);
+	offset.setY(0.2f);
 	_bitmapShader->setUniform("offsetXY", offset);
 	glBindTexture(GL_TEXTURE_2D, _textureRgba4444Id[0]);
 	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
diff --git a/engines/playground3d/gfx_tinygl.cpp b/engines/playground3d/gfx_tinygl.cpp
index c911fb6b3f8..b3c66df54d8 100644
--- a/engines/playground3d/gfx_tinygl.cpp
+++ b/engines/playground3d/gfx_tinygl.cpp
@@ -313,8 +313,8 @@ void TinyGLRenderer::drawInViewport() {
 	tglDisableClientState(TGL_VERTEX_ARRAY);
 
 	tglPushMatrix();
-	_pos.x() += 0.01;
-	_pos.y() += 0.01;
+	_pos.x() += 0.01f;
+	_pos.y() += 0.01f;
 	if (_pos.x() >= 1.0f) {
 		_pos.x() = -1.0;
 		_pos.y() = -1.0;
@@ -358,7 +358,7 @@ void TinyGLRenderer::drawRgbaTexture() {
 	tglEnableClientState(TGL_VERTEX_ARRAY);
 	tglEnableClientState(TGL_TEXTURE_COORD_ARRAY);
 
-	tglTranslatef(-0.799f, 0.8, 0);
+	tglTranslatef(-0.799f, 0.8f, 0);
 	//tglTranslatef(-0.8, 0.8, 0); // some gfx issue
 
 	tglVertexPointer(2, TGL_FLOAT, 2 * sizeof(TGLfloat), bitmapVertices);
@@ -373,7 +373,7 @@ void TinyGLRenderer::drawRgbaTexture() {
 	tglBindTexture(TGL_TEXTURE_2D, _textureRgbId[0]);
 	tglDrawArrays(TGL_TRIANGLE_STRIP, 0, 4);
 
-	tglTranslatef(0.501, 0, 0);
+	tglTranslatef(0.501f, 0, 0);
 	//tglTranslatef(0.5, 0, 0); // some gfx issue
 
 	tglVertexPointer(2, TGL_FLOAT, 2 * sizeof(TGLfloat), bitmapVertices);
diff --git a/engines/playground3d/playground3d.cpp b/engines/playground3d/playground3d.cpp
index ecd396e0f30..b28a5589f04 100644
--- a/engines/playground3d/playground3d.cpp
+++ b/engines/playground3d/playground3d.cpp
@@ -175,9 +175,9 @@ Graphics::Surface *Playground3dEngine::generateRgbaTexture(int width, int height
 void Playground3dEngine::drawAndRotateCube() {
 	Math::Vector3d pos = Math::Vector3d(0.0f, 0.0f, 6.0f);
 	_gfx->drawCube(pos, Math::Vector3d(_rotateAngleX, _rotateAngleY, _rotateAngleZ));
-	_rotateAngleX += 0.25;
-	_rotateAngleY += 0.50;
-	_rotateAngleZ += 0.10;
+	_rotateAngleX += 0.25f;
+	_rotateAngleY += 0.50f;
+	_rotateAngleZ += 0.10f;
 	if (_rotateAngleX >= 360)
 		_rotateAngleX = 0;
 	if (_rotateAngleY >= 360)
@@ -189,7 +189,7 @@ void Playground3dEngine::drawAndRotateCube() {
 void Playground3dEngine::drawPolyOffsetTest() {
 	Math::Vector3d pos = Math::Vector3d(0.0f, 0.0f, 6.0f);
 	_gfx->drawPolyOffsetTest(pos, Math::Vector3d(0, _rotateAngleY, 0));
-	_rotateAngleY += 0.10;
+	_rotateAngleY += 0.10f;
 	if (_rotateAngleY >= 360)
 		_rotateAngleY = 0;
 }
diff --git a/engines/saga/animation.cpp b/engines/saga/animation.cpp
index 150f3431e11..54a6bdc2bc5 100644
--- a/engines/saga/animation.cpp
+++ b/engines/saga/animation.cpp
@@ -699,8 +699,8 @@ void Anim::decodeFrame(AnimationData *anim, size_t frameOffset, byte *buf, size_
 
 	if (_vm->isAGA() || _vm->isECS()) {
 		int curY = 0, curX = 0;
-		unsigned realY;
-		unsigned outbit;
+		unsigned realY = 0;
+		unsigned outbit = 0;
 		// TODO: Check if we want to use tempaltes instead to optimize AGA case
 		unsigned int pixelSize = _vm->isAGA() ? 8 : 5;
 		while (1) {
diff --git a/engines/saga2/actor.cpp b/engines/saga2/actor.cpp
index 7be01880960..e27552cab52 100644
--- a/engines/saga2/actor.cpp
+++ b/engines/saga2/actor.cpp
@@ -3112,7 +3112,7 @@ uint8 Actor::evaluateFollowerNeeds(Actor *follower) {
 
 //  Returns 0 if not moving, 1 if path being calculated,
 //  2 if path being followed.
-bool Actor::pathFindState() {
+int Actor::pathFindState() {
 	if (_moveTask == nullptr)
 		return 0;
 	if (_moveTask->_pathFindTask)
diff --git a/engines/saga2/actor.h b/engines/saga2/actor.h
index 759efc0c860..c0b2366b26f 100644
--- a/engines/saga2/actor.h
+++ b/engines/saga2/actor.h
@@ -946,7 +946,7 @@ public:
 
 	//  Returns 0 if not moving, 1 if path being calculated,
 	//  2 if path being followed.
-	bool pathFindState();
+	int pathFindState();
 
 	//  High level actor behavior functions
 private:
diff --git a/engines/saga2/effects.cpp b/engines/saga2/effects.cpp
index 6767649443f..dde8505847f 100644
--- a/engines/saga2/effects.cpp
+++ b/engines/saga2/effects.cpp
@@ -249,7 +249,7 @@ void ProtoTAGEffect::implement(GameObject *cst, SpellTarget *trg, int8) {
 	assert(tag);
 	if (_affectBit == kSettagLocked) {
 		//if ( tag->builtInBehavior()==ActiveItem::kBuiltInDoor )
-		if (tag->isLocked() != _onOff)
+		if (tag->isLocked() != (_onOff != 0))
 			tag->acceptLockToggle(cst->thisID(), tag->lockType());
 	} else if (_affectBit == kSettagOpen) {
 		tag->trigger(cst->thisID(), _onOff);
diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index d60cea924f6..5bf923c0e40 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -795,6 +795,7 @@ void Actor::startWalkActor(int destX, int destY, int dir) {
 	if (_vm->_game.version <= 4) {
 		abr.x = destX;
 		abr.y = destY;
+		abr.box = kInvalidBox;
 	} else {
 		abr = adjustXYToBeInBox(destX, destY);
 	}
diff --git a/engines/stark/gfx/renderentry.cpp b/engines/stark/gfx/renderentry.cpp
index 36c3b4e64d8..50eee81abe9 100644
--- a/engines/stark/gfx/renderentry.cpp
+++ b/engines/stark/gfx/renderentry.cpp
@@ -122,7 +122,7 @@ bool RenderEntry::compare(const RenderEntry *x, const RenderEntry *y) {
 		// This should ensure the items remain in the same order if they have the same sort key
 		return x->_owner->getIndex() < y->_owner->getIndex();
 	} else {
-		return -1;
+		return (x->_owner < y->_owner);
 	}
 }
 
diff --git a/engines/tony/mpal/expr.cpp b/engines/tony/mpal/expr.cpp
index 1f59e66c481..6643dd9bf45 100644
--- a/engines/tony/mpal/expr.cpp
+++ b/engines/tony/mpal/expr.cpp
@@ -182,7 +182,7 @@ static int evaluateAndFreeExpression(byte *expr) {
  * will point to the area of memory containing the parsed expression
  * @returns		Pointer to the buffer immediately after the expression, or NULL if error.
  */
-const byte *parseExpression(const byte *lpBuf, MpalHandle *h) {
+const byte *parseExpression(const byte *lpBuf, const Common::UnalignedPtr<MpalHandle> &h) {
 	byte *start;
 
 	uint32 num = *lpBuf;
@@ -191,11 +191,11 @@ const byte *parseExpression(const byte *lpBuf, MpalHandle *h) {
 	if (num == 0)
 		return NULL;
 
-	*h = globalAllocate(GMEM_MOVEABLE | GMEM_ZEROINIT, num * sizeof(Expression) + 1);
-	if (*h == NULL)
+	h.store(globalAllocate(GMEM_MOVEABLE | GMEM_ZEROINIT, num * sizeof(Expression) + 1));
+	if (h.load() == NULL)
 		return NULL;
 
-	start = (byte *)globalLock(*h);
+	start = (byte *)globalLock(h.load());
 	*start = (byte)num;
 
 	LpExpression cur = (LpExpression)(start + 1);
diff --git a/engines/tony/mpal/expr.h b/engines/tony/mpal/expr.h
index 043cd13b0f0..a42c69e83cc 100644
--- a/engines/tony/mpal/expr.h
+++ b/engines/tony/mpal/expr.h
@@ -106,7 +106,7 @@ enum ExprListTypes {
  * will point to the area of memory containing the parsed expression
  * @returns		Pointer to the buffer immediately after the expression, or NULL if error.
  */
-const byte *parseExpression(const byte *lpBuf, MpalHandle *h);
+const byte *parseExpression(const byte *lpBuf, const Common::UnalignedPtr<MpalHandle> &h);
 
 /**
  * Calculate the value of a mathamatical expression
diff --git a/engines/ultima/nuvie/gui/widgets/msg_scroll.cpp b/engines/ultima/nuvie/gui/widgets/msg_scroll.cpp
index ebad3058fdf..aba1f5c07a8 100644
--- a/engines/ultima/nuvie/gui/widgets/msg_scroll.cpp
+++ b/engines/ultima/nuvie/gui/widgets/msg_scroll.cpp
@@ -287,7 +287,7 @@ void MsgScroll::set_scroll_dimensions(uint16 w, uint16 h) {
 	display_pos = 0;
 }
 
-int MsgScroll::print(Std::string format, ...) {
+int MsgScroll::print_internal(const Std::string *format, ...) {
 
 	va_list ap;
 	int printed = 0;
@@ -311,7 +311,7 @@ int MsgScroll::print(Std::string format, ...) {
 
 		/* try formatting */
 		va_start(ap, format);
-		printed = vsnprintf(buffer, bufsize, format.c_str(), ap);
+		printed = vsnprintf(buffer, bufsize, format->c_str(), ap);
 		va_end(ap);
 
 		if (printed < 0) {
diff --git a/engines/ultima/nuvie/gui/widgets/msg_scroll.h b/engines/ultima/nuvie/gui/widgets/msg_scroll.h
index d81780f97cc..5f899d1ef8c 100644
--- a/engines/ultima/nuvie/gui/widgets/msg_scroll.h
+++ b/engines/ultima/nuvie/gui/widgets/msg_scroll.h
@@ -233,7 +233,8 @@ public:
 	virtual void set_font(uint8 font_type);
 	virtual bool is_garg_font();
 
-	int print(const Std::string format, ...);
+	template<class... TParam>
+	int print(const Std::string &format, TParam... param);
 
 	virtual void display_string(Std::string s, Font *f, bool include_on_map_window);
 	void display_string(Std::string s, Font *f, uint8 color, bool include_on_map_window);
@@ -324,9 +325,15 @@ protected:
 		return font_color;
 	}
 
-
+private:
+	int print_internal(const Std::string *format, ...);
 };
 
+template<class... TParam>
+inline int MsgScroll::print(const Std::string &format, TParam... param) {
+	return print_internal(&format, Common::forward<TParam>(param)...);
+}
+
 } // End of namespace Nuvie
 } // End of namespace Ultima
 
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 14b065b3529..cb9b9fe88c9 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -485,7 +485,7 @@ bool BaseRenderOpenGL3D::setup3D(Camera3D *camera, bool force) {
 		glEnable(GL_BLEND);
 		// wme uses 8 as a reference value and Direct3D expects it to be in the range [0, 255]
 		// 8 / 255 ~ 0.0313
-		glAlphaFunc(GL_GEQUAL, 0.0313);
+		glAlphaFunc(GL_GEQUAL, 0.0313f);
 
 		setAmbientLight();
 
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
index 3f572814160..68a1f594043 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -179,7 +179,7 @@ bool BaseRenderOpenGL3DShader::enableShadows() {
 
 		float nearPlane = 1.0f;
 		float farPlane = 10000.0f;
-		float fovy = M_PI / 4.0f;
+		float fovy = static_cast<float>(M_PI / 4.0f);
 
 		float top = nearPlane *  tanf(fovy * 0.5f);
 		float bottom = -top;
diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp
index de475a586e3..4bc58b62e4f 100644
--- a/engines/wintermute/wintermute.cpp
+++ b/engines/wintermute/wintermute.cpp
@@ -196,7 +196,7 @@ int WintermuteEngine::init() {
 	#ifdef ENABLE_WME3D
 	Common::ArchiveMemberList actors3d;
 	_game->_playing3DGame = instance.getFlags() & GF_3D;
-	_game->_playing3DGame |= BaseEngine::instance().getFileManager()->listMatchingPackageMembers(actors3d, "*.act3d");
+	_game->_playing3DGame |= (BaseEngine::instance().getFileManager()->listMatchingPackageMembers(actors3d, "*.act3d") != 0);
 	#endif
 	instance.setGameRef(_game);
 	BasePlatform::initialize(this, _game, 0, nullptr);


Commit: 843776dd851c92c9f3525610d3bdbafda6454478
    https://github.com/scummvm/scummvm/commit/843776dd851c92c9f3525610d3bdbafda6454478
Author: elasota (ejlasota at gmail.com)
Date: 2022-12-25T16:31:57+01:00

Commit Message:
DEVTOOLS: Promote numerous VS warnings to errors.

Changes the following warnings to errors:
C4701: potential use of uninitialized local variable
C4703: potential use of uninitialized local pointer
C4456: declaration hides previous local declaration
C4003: not enough arguments for function-like macro invocation
C4840: use of non-trivial class as an argument to a variadic function
C4805: unsafe mix of bool and int in a numeric operation or comparison
C4305: truncation of double to float or int to bool
C4366: address taken of unaligned field and used as an aligned pointer
C4315: object constructed into an unaligned field with a constructor that expects it to be aligned

Changed paths:
    devtools/create_project/cmake.cpp
    devtools/create_project/cmake.h
    devtools/create_project/codeblocks.cpp
    devtools/create_project/codeblocks.h
    devtools/create_project/create_project.cpp
    devtools/create_project/create_project.h
    devtools/create_project/msbuild.cpp
    devtools/create_project/msbuild.h
    devtools/create_project/msvc.cpp
    devtools/create_project/msvc.h
    devtools/create_project/xcode.cpp
    devtools/create_project/xcode.h


diff --git a/devtools/create_project/cmake.cpp b/devtools/create_project/cmake.cpp
index 4fd9f9581de..6f62e04f50b 100644
--- a/devtools/create_project/cmake.cpp
+++ b/devtools/create_project/cmake.cpp
@@ -29,8 +29,8 @@
 
 namespace CreateProjectTool {
 
-CMakeProvider::CMakeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version)
-	: ProjectProvider(global_warnings, project_warnings, version) {
+CMakeProvider::CMakeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version)
+	: ProjectProvider(global_warnings, project_warnings, global_errors, version) {
 }
 
 const CMakeProvider::Library *CMakeProvider::getLibraryFromFeature(const char *feature, bool useSDL2) const {
diff --git a/devtools/create_project/cmake.h b/devtools/create_project/cmake.h
index b678f23bfae..520c521202d 100644
--- a/devtools/create_project/cmake.h
+++ b/devtools/create_project/cmake.h
@@ -34,7 +34,7 @@ namespace CreateProjectTool {
  */
 class CMakeProvider final : public ProjectProvider {
 public:
-	CMakeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version = 0);
+	CMakeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version = 0);
 
 protected:
 
diff --git a/devtools/create_project/codeblocks.cpp b/devtools/create_project/codeblocks.cpp
index 2921fe6be46..bc72ba332cb 100644
--- a/devtools/create_project/codeblocks.cpp
+++ b/devtools/create_project/codeblocks.cpp
@@ -27,8 +27,8 @@
 
 namespace CreateProjectTool {
 
-CodeBlocksProvider::CodeBlocksProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version)
-	: ProjectProvider(global_warnings, project_warnings, version) {
+CodeBlocksProvider::CodeBlocksProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version)
+	: ProjectProvider(global_warnings, project_warnings, global_errors, version) {
 }
 
 void CodeBlocksProvider::createWorkspace(const BuildSetup &setup) {
diff --git a/devtools/create_project/codeblocks.h b/devtools/create_project/codeblocks.h
index 340b77bf429..9ef68e63ccc 100644
--- a/devtools/create_project/codeblocks.h
+++ b/devtools/create_project/codeblocks.h
@@ -28,7 +28,7 @@ namespace CreateProjectTool {
 
 class CodeBlocksProvider final : public ProjectProvider {
 public:
-	CodeBlocksProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version = 0);
+	CodeBlocksProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version = 0);
 
 protected:
 
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index c76e31d50b3..24a605dcab0 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -452,6 +452,7 @@ int main(int argc, char *argv[]) {
 	// actually...). While in MSVC this is solely for disabling warnings.
 	// That is really not nice. We should consider a nicer way of doing this.
 	StringList globalWarnings;
+	StringList globalErrors;
 	std::map<std::string, StringList> projectWarnings;
 
 	CreateProjectTool::ProjectProvider *provider = nullptr;
@@ -470,7 +471,7 @@ int main(int argc, char *argv[]) {
 
 		addGCCWarnings(globalWarnings);
 
-		provider = new CreateProjectTool::CMakeProvider(globalWarnings, projectWarnings);
+		provider = new CreateProjectTool::CMakeProvider(globalWarnings, projectWarnings, globalErrors);
 
 		break;
 
@@ -482,7 +483,7 @@ int main(int argc, char *argv[]) {
 
 		addGCCWarnings(globalWarnings);
 
-		provider = new CreateProjectTool::CodeBlocksProvider(globalWarnings, projectWarnings);
+		provider = new CreateProjectTool::CodeBlocksProvider(globalWarnings, projectWarnings, globalErrors);
 
 		break;
 
@@ -613,6 +614,16 @@ int main(int argc, char *argv[]) {
 			globalWarnings.push_back("4577");
 		}
 
+		globalErrors.push_back("4701"); // potential use of uninitialized local variable
+		globalErrors.push_back("4703"); // potential use of uninitialized local pointer
+		globalErrors.push_back("4456"); // declaration hides previous local declaration
+		globalErrors.push_back("4003"); // not enough arguments for function-like macro invocation
+		globalErrors.push_back("4840"); // use of non-trivial class as an argument to a variadic function
+		globalErrors.push_back("4805"); // comparison of bool to non-bool, unsafe mix of bool and int in arithmetic or bitwise operation
+		globalErrors.push_back("4305"); // truncation of double to float or int to bool
+		globalErrors.push_back("4366"); // address taken of unaligned field
+		globalErrors.push_back("4315"); // unaligned field has constructor that expects to be aligned
+
 		projectWarnings["agi"].push_back("4510");
 		projectWarnings["agi"].push_back("4610");
 
@@ -631,7 +642,9 @@ int main(int argc, char *argv[]) {
 
 		projectWarnings["sci"].push_back("4373");
 
-		provider = new CreateProjectTool::MSBuildProvider(globalWarnings, projectWarnings, msvcVersion, *msvc);
+		projectWarnings["grim"].push_back("4611");
+
+		provider = new CreateProjectTool::MSBuildProvider(globalWarnings, projectWarnings, globalErrors, msvcVersion, *msvc);
 
 		break;
 
@@ -643,7 +656,7 @@ int main(int argc, char *argv[]) {
 
 		addGCCWarnings(globalWarnings);
 
-		provider = new CreateProjectTool::XcodeProvider(globalWarnings, projectWarnings);
+		provider = new CreateProjectTool::XcodeProvider(globalWarnings, projectWarnings, globalErrors);
 		break;
 	}
 
@@ -1528,8 +1541,8 @@ FileNode *scanFiles(const std::string &dir, const StringList &includeList, const
 //////////////////////////////////////////////////////////////////////////
 // Project Provider methods
 //////////////////////////////////////////////////////////////////////////
-ProjectProvider::ProjectProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version)
-	: _version(version), _globalWarnings(global_warnings), _projectWarnings(project_warnings) {
+ProjectProvider::ProjectProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version)
+	: _version(version), _globalWarnings(global_warnings), _projectWarnings(project_warnings), _globalErrors(global_errors) {
 }
 
 void ProjectProvider::createProject(BuildSetup &setup) {
diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h
index 69d7ff90823..d6407d31b18 100644
--- a/devtools/create_project/create_project.h
+++ b/devtools/create_project/create_project.h
@@ -489,7 +489,7 @@ public:
 	 * @param project_warnings List of project-specific warnings
 	 * @param version Target project version.
 	 */
-	ProjectProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version = 0);
+	ProjectProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version = 0);
 	virtual ~ProjectProvider() {}
 
 	/**
@@ -509,7 +509,8 @@ public:
 
 protected:
 	const int _version;                                  ///< Target project version
-	StringList &_globalWarnings;                         ///< Global warnings
+	StringList &_globalWarnings;                         ///< Global (ignored) warnings
+	StringList &_globalErrors;                           ///< Global errors (promoted from warnings)
 	std::map<std::string, StringList> &_projectWarnings; ///< Per-project warnings
 
 	UUIDMap _engineUuidMap; ///< List of (project name, UUID) pairs
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp
index 2b7d61a6304..2b9bdeae29a 100644
--- a/devtools/create_project/msbuild.cpp
+++ b/devtools/create_project/msbuild.cpp
@@ -31,8 +31,8 @@ namespace CreateProjectTool {
 // MSBuild Provider (Visual Studio 2010 and later)
 //////////////////////////////////////////////////////////////////////////
 
-MSBuildProvider::MSBuildProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version, const MSVCVersion &msvc)
-	: MSVCProvider(global_warnings, project_warnings, version, msvc) {
+MSBuildProvider::MSBuildProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version, const MSVCVersion &msvc)
+	: MSVCProvider(global_warnings, project_warnings, global_errors, version, msvc) {
 
 	_archs.push_back(ARCH_X86);
 	_archs.push_back(ARCH_AMD64);
@@ -349,6 +349,10 @@ void MSBuildProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstrea
 	for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i)
 		warnings += *i + ';';
 
+	std::string warningsAsErrors;
+	for (StringList::const_iterator i = _globalErrors.begin(); i != _globalErrors.end(); ++i)
+		warningsAsErrors += "/we\"" + (*i) + "\" ";
+
 	std::string definesList;
 	for (StringList::const_iterator i = defines.begin(); i != defines.end(); ++i)
 		definesList += *i + ';';
@@ -395,7 +399,7 @@ void MSBuildProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstrea
 	           << "\t\t\t<MultiProcessorCompilation>true</MultiProcessorCompilation>\n"
 	           << "\t\t\t<ConformanceMode>true</ConformanceMode>\n"
 	           << "\t\t\t<ObjectFileName>$(IntDir)dists\\msvc\\%(RelativeDir)</ObjectFileName>\n"
-	           << "\t\t\t<AdditionalOptions>/utf-8 " << (_msvcVersion.version >= 15 ? "/Zc:__cplusplus " : "") << "%(AdditionalOptions)</AdditionalOptions>\n"
+			   << "\t\t\t<AdditionalOptions>/utf-8 " << (_msvcVersion.version >= 15 ? "/Zc:__cplusplus " : "") << warningsAsErrors << "%(AdditionalOptions)</AdditionalOptions>\n"
 	           << "\t\t</ClCompile>\n"
 	           << "\t\t<Link>\n"
 	           << "\t\t\t<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\n";
diff --git a/devtools/create_project/msbuild.h b/devtools/create_project/msbuild.h
index cd0f4d992a8..a790b8f52d7 100644
--- a/devtools/create_project/msbuild.h
+++ b/devtools/create_project/msbuild.h
@@ -28,7 +28,7 @@ namespace CreateProjectTool {
 
 class MSBuildProvider final : public MSVCProvider {
 public:
-	MSBuildProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version, const MSVCVersion &msvc);
+	MSBuildProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version, const MSVCVersion &msvc);
 
 protected:
 	void createProjectFile(const std::string &name, const std::string &uuid, const BuildSetup &setup, const std::string &moduleDir,
diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp
index 250773b48b2..29c504181a0 100644
--- a/devtools/create_project/msvc.cpp
+++ b/devtools/create_project/msvc.cpp
@@ -31,8 +31,8 @@ namespace CreateProjectTool {
 //////////////////////////////////////////////////////////////////////////
 // MSVC Provider (Base class)
 //////////////////////////////////////////////////////////////////////////
-MSVCProvider::MSVCProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version, const MSVCVersion &msvc)
-	: ProjectProvider(global_warnings, project_warnings, version), _msvcVersion(msvc) {
+MSVCProvider::MSVCProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version, const MSVCVersion &msvc)
+	: ProjectProvider(global_warnings, project_warnings, global_errors, version), _msvcVersion(msvc) {
 
 	_enableLanguageExtensions = tokenize(ENABLE_LANGUAGE_EXTENSIONS, ',');
 	_disableEditAndContinue = tokenize(DISABLE_EDIT_AND_CONTINUE, ',');
diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h
index c0e496e5cc7..b503fc03ec9 100644
--- a/devtools/create_project/msvc.h
+++ b/devtools/create_project/msvc.h
@@ -28,7 +28,7 @@ namespace CreateProjectTool {
 
 class MSVCProvider : public ProjectProvider {
 public:
-	MSVCProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version, const MSVCVersion &msvcVersion);
+	MSVCProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version, const MSVCVersion &msvcVersion);
 
 protected:
 	const MSVCVersion _msvcVersion;
diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp
index b9c4a3a8e29..a398b49416c 100644
--- a/devtools/create_project/xcode.cpp
+++ b/devtools/create_project/xcode.cpp
@@ -271,8 +271,8 @@ void XcodeProvider::addBuildFile(const std::string &id, const std::string &name,
 	_buildFile._flags = kSettingsSingleItem;
 }
 
-XcodeProvider::XcodeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version)
-	: ProjectProvider(global_warnings, project_warnings, version) {
+XcodeProvider::XcodeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version)
+	: ProjectProvider(global_warnings, project_warnings, global_errors, version) {
 	_rootSourceGroup = nullptr;
 }
 
diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h
index 8f33510ff48..9429274e418 100644
--- a/devtools/create_project/xcode.h
+++ b/devtools/create_project/xcode.h
@@ -31,7 +31,7 @@ namespace CreateProjectTool {
 
 class XcodeProvider final : public ProjectProvider {
 public:
-	XcodeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version = 0);
+	XcodeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, StringList &global_errors, const int version = 0);
 
 protected:
 




More information about the Scummvm-git-logs mailing list