mutter/cogl/driver/gl
Neil Roberts 7bf0fe9df8 Don't dereference an unitialised pointer in _cogl_container_of
The previous implementation was dereferencing the sample pointer in
order to get the offset to subtract from the member pointer. The
resulting value is then only used to get a pointer to the member in
order to calculate the offset so it doesn't actually read from the
memory location and shouldn't cause any problems. However this is
probably technically invalid and could have undefined behaviour. It
looks like clang takes advantage of this undefined behaviour and
doesn't actually offset the pointer. It also generates a warning when
it does this.

This patch splits the _cogl_container_of macro into two
implementations. Previously the macro was always used in the list
iterator macros like this:

SomeType *sample = _cogl_container_of(list_node, sample, link)

Instead of doing that there is now a new macro called
_cogl_list_set_iterator which explicitly assigns to the sample pointer
with an initial value before assigning to it again with the real
offset. This redundant initialisation gets optimised out by compiler.

The second macro is still called _cogl_container_of but instead of
taking a sample pointer it just directly takes the type name. That way
it can use the standard offsetof macro.

https://bugzilla.gnome.org/show_bug.cgi?id=723530

Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 1efed1e0a2bce706eb4901979ed4e717bb13e4e2)
2014-02-20 13:38:43 +00:00
..
gl Add support for RG textures 2014-01-20 14:40:45 +00:00
gles Add support for RG textures 2014-01-20 14:40:45 +00:00
cogl-attribute-gl-private.h buffer: splits out GL specific code 2013-01-22 17:47:59 +00:00
cogl-attribute-gl.c Use COGL_FLAGS_* for the context's private feature flags 2013-11-28 18:12:22 +00:00
cogl-buffer-gl-private.h Allow propogation of OOM errors to apps 2013-01-22 17:48:07 +00:00
cogl-buffer-gl.c buffer: Don't set the invalidate hint when requesting read access 2013-02-19 15:03:30 +00:00
cogl-clip-stack-gl-private.h clip-stack: Splits out opengl specific code 2013-01-22 17:47:59 +00:00
cogl-clip-stack-gl.c Use COGL_FLAGS_* for the context's private feature flags 2013-11-28 18:12:22 +00:00
cogl-framebuffer-gl-private.h framebuffer: Bind the framebuffer before querying the bits 2013-01-22 17:48:18 +00:00
cogl-framebuffer-gl.c remove internal_format and redundant error arguments 2014-01-09 15:49:47 +00:00
cogl-pipeline-fragend-fixed-private.h Re-organize the source layout 2013-01-22 17:47:19 +00:00
cogl-pipeline-fragend-fixed.c Remove cogl-internal.h 2013-01-22 17:48:17 +00:00
cogl-pipeline-fragend-glsl-private.h Re-organize the source layout 2013-01-22 17:47:19 +00:00
cogl-pipeline-fragend-glsl.c Don't dereference an unitialised pointer in _cogl_container_of 2014-02-20 13:38:43 +00:00
cogl-pipeline-opengl-private.h pipeline: improve real_blend_enable checks 2013-06-06 21:27:09 +01:00
cogl-pipeline-opengl.c Use COGL_FLAGS_* for the context's private feature flags 2013-11-28 18:12:22 +00:00
cogl-pipeline-progend-fixed-private.h Re-organize the source layout 2013-01-22 17:47:19 +00:00
cogl-pipeline-progend-fixed.c Use COGL_FLAGS_* for the context's private feature flags 2013-11-28 18:12:22 +00:00
cogl-pipeline-progend-glsl-private.h Re-organize the source layout 2013-01-22 17:47:19 +00:00
cogl-pipeline-progend-glsl.c pipeline-cache: Prune old unused pipelines when the cache gets too big 2014-01-14 12:05:17 +00:00
cogl-pipeline-vertend-fixed-private.h Re-organize the source layout 2013-01-22 17:47:19 +00:00
cogl-pipeline-vertend-fixed.c Don't generate GLSL for the point size for default pipelines 2013-06-21 14:18:37 +01:00
cogl-pipeline-vertend-glsl-private.h Re-organize the source layout 2013-01-22 17:47:19 +00:00
cogl-pipeline-vertend-glsl.c pipeline-cache: Prune old unused pipelines when the cache gets too big 2014-01-14 12:05:17 +00:00
cogl-texture-2d-gl-private.h texture: remove _cogl_texture_prepare_for_upload 2013-07-29 16:31:44 +01:00
cogl-texture-2d-gl.c remove internal_format and redundant error arguments 2014-01-09 15:49:47 +00:00
cogl-texture-gl-private.h Move _cogl_texture_get_gl_format to -texture-gl.c 2013-01-22 17:48:17 +00:00
cogl-texture-gl.c Use COGL_FLAGS_* for the context's private feature flags 2013-11-28 18:12:22 +00:00
cogl-util-gl-private.h Add the layer's sampler and uniform declarations at the start 2013-02-27 15:53:43 +00:00
cogl-util-gl.c Add the layer's sampler and uniform declarations at the start 2013-02-27 15:53:43 +00:00