On Wed, Mar 12, 2014 at 2:11 PM, Juha-Pekka Heikkila <juhapekka.heikk...@gmail.com> wrote: > Type mismatch caused random memory to be copied when casted > memory area was smaller than expected type. > > Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikk...@gmail.com> > --- > src/mesa/main/ff_fragment_shader.cpp | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/src/mesa/main/ff_fragment_shader.cpp > b/src/mesa/main/ff_fragment_shader.cpp > index cad67aa..3e00424 100644 > --- a/src/mesa/main/ff_fragment_shader.cpp > +++ b/src/mesa/main/ff_fragment_shader.cpp > @@ -888,14 +888,15 @@ emit_texenv(texenv_fragment_program *p, GLuint unit) > shift = new(p->mem_ctx) ir_constant((float)(1 << rgb_shift)); > } > else { > - float const_data[4] = { > - float(1 << rgb_shift), > - float(1 << rgb_shift), > - float(1 << rgb_shift), > - float(1 << alpha_shift) > - }; > - shift = new(p->mem_ctx) ir_constant(glsl_type::vec4_type, > - (ir_constant_data *)const_data); > + ir_constant_data const_data = { .f = { > + float(1 << rgb_shift), > + float(1 << rgb_shift), > + float(1 << rgb_shift), > + float(1 << alpha_shift) > + } };
Huh. I'm confused. I thought C++ didn't allow designated initializers. gcc accepts it here, and only warns with -pedantic: warning: ISO C++ does not allow C99 designated initializers [-Wpedantic] Maybe it's just that MSVC doesn't support them? Google is telling me that the only way to initialize a union in C++ is by initializing its first field. In the case that we can actually use designated initializers, Let's indent this like so: ir_constant_data const_data = { .f = { float(1 << rgb_shift), float(1 << rgb_shift), float(1 << rgb_shift), float(1 << alpha_shift) } }; (and hope gmail doesn't mess that up.) _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev