[Bf-blender-cvs] [b763c34e80d] master: Cycles: Cleanup, silence strict compiler warning

Sergey Sharybin noreply at git.blender.org
Mon Jun 11 13:02:15 CEST 2018


Commit: b763c34e80d3b20f9a7f0a592e479e5fa7ab295f
Author: Sergey Sharybin
Date:   Mon Jun 11 12:54:17 2018 +0200
Branches: master
https://developer.blender.org/rBb763c34e80d3b20f9a7f0a592e479e5fa7ab295f

Cycles: Cleanup, silence strict compiler warning

There is one legit place in the code where memcpy was used as an
optimization trick. Was needed for older version of GCC, but now
it should be re-evaluated and checked if it still helps to have
that trick.

In other places it's somewhat lazy programming to zero out all
object members. That is absolutely unsafe, at the moment when
less trivial class is used as a member in that object things
will break.

Other cases were using memcpy into an object which comes from
an external library. We don't control that object, and we can
not guarantee it will always be safe for such memory tricks
and debugging bugs caused by such low level access is far fun.

Ideally we need to use more proper C++, but needs to be done with
big care, including benchmarks of each change, For now do
annoying but simple cast to void*.

===================================================================

M	intern/cycles/blender/blender_camera.cpp
M	intern/cycles/blender/blender_util.h
M	intern/cycles/bvh/bvh_params.h
M	intern/cycles/kernel/closure/alloc.h
M	intern/cycles/kernel/osl/osl_services.cpp
M	intern/cycles/kernel/osl/osl_shader.cpp
M	intern/cycles/render/camera.cpp
M	intern/cycles/render/scene.cpp
M	intern/cycles/render/svm.cpp
M	intern/cycles/util/util_vector.h

===================================================================

diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp
index f00ade320e7..435afabc2bb 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -90,7 +90,7 @@ struct BlenderCamera {
 static void blender_camera_init(BlenderCamera *bcam,
                                 BL::RenderSettings& b_render)
 {
-	memset(bcam, 0, sizeof(BlenderCamera));
+	memset((void *)bcam, 0, sizeof(BlenderCamera));
 
 	bcam->type = CAMERA_PERSPECTIVE;
 	bcam->zoom = 1.0f;
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 85bff8f8323..5176f9c3b50 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -251,7 +251,7 @@ static inline Transform get_transform(const BL::Array<float, 16>& array)
 
 	/* We assume both types to be just 16 floats, and transpose because blender
 	 * use column major matrix order while we use row major. */
-	memcpy(&projection, &array, sizeof(float)*16);
+	memcpy((void *)&projection, &array, sizeof(float)*16);
 	projection = projection_transpose(projection);
 
 	/* Drop last row, matrix is assumed to be affine transform. */
diff --git a/intern/cycles/bvh/bvh_params.h b/intern/cycles/bvh/bvh_params.h
index 89a379cf356..d8dd7df6ba1 100644
--- a/intern/cycles/bvh/bvh_params.h
+++ b/intern/cycles/bvh/bvh_params.h
@@ -182,7 +182,10 @@ public:
 
 	BVHReference& operator=(const BVHReference &arg) {
 		if(&arg != this) {
-			memcpy(this, &arg, sizeof(BVHReference));
+			/* TODO(sergey): Check if it is still faster to memcpy() with
+			 * modern compilers.
+			 */
+			memcpy((void *)this, &arg, sizeof(BVHReference));
 		}
 		return *this;
 	}
diff --git a/intern/cycles/kernel/closure/alloc.h b/intern/cycles/kernel/closure/alloc.h
index b903aeb8073..acccba9ecec 100644
--- a/intern/cycles/kernel/closure/alloc.h
+++ b/intern/cycles/kernel/closure/alloc.h
@@ -75,7 +75,7 @@ ccl_device_inline ShaderClosure *bsdf_alloc_osl(ShaderData *sd, int size, float3
 	if(!sc)
 		return NULL;
 
-	memcpy(sc, data, size);
+	memcpy((void *)sc, data, size);
 
 	float sample_weight = fabsf(average(weight));
 	sc->weight = weight;
diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp
index 32d86b7192a..5f4baf6fda3 100644
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@ -65,13 +65,13 @@ CCL_NAMESPACE_BEGIN
 static void copy_matrix(OSL::Matrix44& m, const Transform& tfm)
 {
 	ProjectionTransform t = projection_transpose(ProjectionTransform(tfm));
-	memcpy(&m, &t, sizeof(m));
+	memcpy((void *)&m, &t, sizeof(m));
 }
 
 static void copy_matrix(OSL::Matrix44& m, const ProjectionTransform& tfm)
 {
 	ProjectionTransform t = projection_transpose(tfm);
-	memcpy(&m, &t, sizeof(m));
+	memcpy((void *)&m, &t, sizeof(m));
 }
 
 /* static ustrings */
diff --git a/intern/cycles/kernel/osl/osl_shader.cpp b/intern/cycles/kernel/osl/osl_shader.cpp
index 6b3a996ca12..b7d1c629291 100644
--- a/intern/cycles/kernel/osl/osl_shader.cpp
+++ b/intern/cycles/kernel/osl/osl_shader.cpp
@@ -53,7 +53,7 @@ void OSLShader::thread_init(KernelGlobals *kg, KernelGlobals *kernel_globals, OS
 	OSL::ShadingSystem *ss = kg->osl->ss;
 	OSLThreadData *tdata = new OSLThreadData();
 
-	memset(&tdata->globals, 0, sizeof(OSL::ShaderGlobals));
+	memset((void *)&tdata->globals, 0, sizeof(OSL::ShaderGlobals));
 	tdata->globals.tracedata = &tdata->tracedata;
 	tdata->globals.flipHandedness = false;
 	tdata->osl_thread_info = ss->create_thread_info();
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp
index 38936ffc094..734cdffd5c5 100644
--- a/intern/cycles/render/camera.cpp
+++ b/intern/cycles/render/camera.cpp
@@ -176,7 +176,7 @@ Camera::Camera()
 	need_flags_update = true;
 	previous_need_motion = -1;
 
-	memset(&kernel_camera, 0, sizeof(kernel_camera));
+	memset((void *)&kernel_camera, 0, sizeof(kernel_camera));
 }
 
 Camera::~Camera()
diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp
index b35cdbd3db5..c0f1ae0445e 100644
--- a/intern/cycles/render/scene.cpp
+++ b/intern/cycles/render/scene.cpp
@@ -79,13 +79,13 @@ DeviceScene::DeviceScene(Device *device)
   sobol_directions(device, "__sobol_directions", MEM_TEXTURE),
   ies_lights(device, "__ies", MEM_TEXTURE)
 {
-	memset(&data, 0, sizeof(data));
+	memset((void*)&data, 0, sizeof(data));
 }
 
 Scene::Scene(const SceneParams& params_, Device *device)
 : device(device), dscene(device), params(params_)
 {
-	memset(&dscene.data, 0, sizeof(dscene.data));
+	memset((void *)&dscene.data, 0, sizeof(dscene.data));
 
 	camera = new Camera();
 	dicing_camera = new Camera();
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index eb8a35a271f..626f160786f 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -735,7 +735,7 @@ void SVMCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty
 	}
 
 	/* clear all compiler state */
-	memset(&active_stack, 0, sizeof(active_stack));
+	memset((void *)&active_stack, 0, sizeof(active_stack));
 	current_svm_nodes.clear();
 
 	foreach(ShaderNode *node_iter, graph->nodes) {
diff --git a/intern/cycles/util/util_vector.h b/intern/cycles/util/util_vector.h
index e98e4e34181..8d91d3936a4 100644
--- a/intern/cycles/util/util_vector.h
+++ b/intern/cycles/util/util_vector.h
@@ -131,7 +131,7 @@ public:
 	{
 		if(this != &from) {
 			resize(from.size());
-			memcpy(data_, from.data_, datasize_*sizeof(T));
+			memcpy((void*)data_, from.data_, datasize_*sizeof(T));
 		}
 
 		return *this;
@@ -204,7 +204,9 @@ public:
 					return NULL;
 				}
 				else if(data_ != NULL) {
-					memcpy(newdata, data_, ((datasize_ < newsize)? datasize_: newsize)*sizeof(T));
+					memcpy((void *)newdata,
+					       data_,
+					       ((datasize_ < newsize)? datasize_: newsize)*sizeof(T));
 					mem_free(data_, capacity_);
 				}
 				data_ = newdata;



More information about the Bf-blender-cvs mailing list