i965: Make vec4_visitor's destructor virtual
authorIago Toral Quiroga <itoral@igalia.com>
Mon, 5 Oct 2015 07:02:54 +0000 (09:02 +0200)
committerIago Toral Quiroga <itoral@igalia.com>
Mon, 5 Oct 2015 11:50:15 +0000 (13:50 +0200)
We need a virtual destructor when at least one of the class' methods is virtual.
Failure to do so might lead to undefined behavior when destructing derived classes.
Fixes the following warning:

brw_vec4_gs_visitor.cpp: In function 'const unsigned int* brw::brw_gs_emit(brw_context*, gl_shader_program*, brw_gs_compile*, void*, unsigned int*)':
brw_vec4_gs_visitor.cpp:703:11: warning: deleting object of polymorphic class type 'brw::vec4_gs_visitor' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
    delete gs;

Curro: This shouldn't be causing any actual bugs at the moment because
gen6_gs_visitor is the only subclass of vec4_visitor destroyed through
a pointer of a base class (vec4_gs_visitor *) and its destructor is
basically the same as its parent's. Anyway it seems sensible to change
this so it doesn't bite us in the future.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/mesa/drivers/dri/i965/brw_vec4.h

index d1fa095a29fb0d4780e4d7cc2b72fd4cbef53e76..5e3500c0c9ac31f7cf3c2f3f6513988284a9311e 100644 (file)
@@ -76,7 +76,7 @@ public:
                void *mem_ctx,
                 bool no_spills,
                 int shader_time_index);
-   ~vec4_visitor();
+   virtual ~vec4_visitor();
 
    dst_reg dst_null_f()
    {