[Mesa-dev] Fwd: New Defects reported by Coverity Scan for Mesa
Matt Turner
mattst88 at gmail.com
Wed Jan 11 18:25:22 UTC 2017
Coverity thinks there are some bad shifts introduced by commit c2acf97.
I think it thinks that first can be 64 because 64 is the greatest
value that can be returned by ffsll(), but that's not actually
possible? If that's correct, maybe an assert is in order.
** CID 1398563: (BAD_SHIFT)
/src/mesa/drivers/dri/i965/brw_draw_upload.c: 493 in brw_prepare_vertices()
/src/mesa/drivers/dri/i965/brw_draw_upload.c: 489 in brw_prepare_vertices()
/src/mesa/drivers/dri/i965/brw_draw_upload.c: 491 in brw_prepare_vertices()
________________________________________________________________________________________________________
*** CID 1398563: (BAD_SHIFT)
/src/mesa/drivers/dri/i965/brw_draw_upload.c: 493 in brw_prepare_vertices()
487
BITFIELD64_MASK(first)), 2);
488 struct brw_vertex_element *input = &brw->vb.inputs[index];
489 input->is_dual_slot = brw->gen >= 8 &&
490 (vs_prog_data->double_inputs_read &
BITFIELD64_BIT(first)) != 0;
491 vs_inputs &= ~BITFIELD64_BIT(first);
492 if (input->is_dual_slot)
>>> CID 1398563: (BAD_SHIFT)
>>> In expression "1UL << first + 1U", left shifting by more than 63 bits has undefined behavior. The shift amount, "first + 1U", is 65.
493 vs_inputs &= ~BITFIELD64_BIT(first + 1);
494 brw->vb.enabled[brw->vb.nr_enabled++] = input;
495 }
496
497 if (brw->vb.nr_enabled == 0)
498 return;
/src/mesa/drivers/dri/i965/brw_draw_upload.c: 489 in brw_prepare_vertices()
483 while (vs_inputs) {
484 GLuint first = ffsll(vs_inputs) - 1;
485 GLuint index =
486 first -
DIV_ROUND_UP(_mesa_bitcount_64(vs_prog_data->double_inputs_read &
487
BITFIELD64_MASK(first)), 2);
488 struct brw_vertex_element *input = &brw->vb.inputs[index];
>>> CID 1398563: (BAD_SHIFT)
>>> In expression "1UL << first", left shifting by more than 63 bits has undefined behavior. The shift amount, "first", is 64.
489 input->is_dual_slot = brw->gen >= 8 &&
490 (vs_prog_data->double_inputs_read &
BITFIELD64_BIT(first)) != 0;
491 vs_inputs &= ~BITFIELD64_BIT(first);
492 if (input->is_dual_slot)
493 vs_inputs &= ~BITFIELD64_BIT(first + 1);
494 brw->vb.enabled[brw->vb.nr_enabled++] = input;
/src/mesa/drivers/dri/i965/brw_draw_upload.c: 491 in brw_prepare_vertices()
485 GLuint index =
486 first -
DIV_ROUND_UP(_mesa_bitcount_64(vs_prog_data->double_inputs_read &
487
BITFIELD64_MASK(first)), 2);
488 struct brw_vertex_element *input = &brw->vb.inputs[index];
489 input->is_dual_slot = brw->gen >= 8 &&
490 (vs_prog_data->double_inputs_read &
BITFIELD64_BIT(first)) != 0;
>>> CID 1398563: (BAD_SHIFT)
>>> In expression "1UL << first", left shifting by more than 63 bits has undefined behavior. The shift amount, "first", is 64.
491 vs_inputs &= ~BITFIELD64_BIT(first);
492 if (input->is_dual_slot)
493 vs_inputs &= ~BITFIELD64_BIT(first + 1);
494 brw->vb.enabled[brw->vb.nr_enabled++] = input;
495 }
496
More information about the mesa-dev
mailing list