From e3dfa8f4d694e7d64a6401752af1f973b0852aab Mon Sep 17 00:00:00 2001 From: "Kristian H. Kristensen" Date: Mon, 3 Feb 2020 12:43:19 -0800 Subject: [PATCH] glsl: Use 'using' to be explicit about visitor overloads Clang has a warning about overloading virtuals that triggers when a derived class defines a virtual function that's an overload of function in the base class. This kind of thing: struct chart; // let's pretend this exists struct Base { virtual void* get(char* e); }; struct Derived: public Base { virtual void* get(chart* e); // typo, we wanted to override the same function }; The solution is to use using Base::get; to be explicit about the intention to reuse the base class virtual. We hit this a lot with out glsl ir_hierarchical_visitor visitor pattern, so let's adds some 'using' to calm down the compiler. See-also: https://stackoverflow.com/questions/18515183/c-overloaded-virtual-function-warning-by-clang) Part-of: --- src/compiler/glsl/linker.cpp | 4 ++++ src/compiler/glsl/lower_jumps.cpp | 2 ++ src/compiler/glsl/opt_constant_variable.cpp | 3 +++ src/compiler/glsl/opt_dead_code_local.cpp | 2 ++ 4 files changed, 11 insertions(+) diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 880f42ae171..d69dff7bbd9 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -260,6 +260,8 @@ public: class array_resize_visitor : public deref_type_updater { public: + using deref_type_updater::visit; + unsigned num_vertices; gl_shader_program *prog; gl_shader_stage stage; @@ -1506,6 +1508,8 @@ move_non_declarations(exec_list *instructions, exec_node *last, */ class array_sizing_visitor : public deref_type_updater { public: + using deref_type_updater::visit; + array_sizing_visitor() : mem_ctx(ralloc_context(NULL)), unnamed_interfaces(_mesa_pointer_hash_table_create(NULL)) diff --git a/src/compiler/glsl/lower_jumps.cpp b/src/compiler/glsl/lower_jumps.cpp index 3286a1c5794..389f5847b3e 100644 --- a/src/compiler/glsl/lower_jumps.cpp +++ b/src/compiler/glsl/lower_jumps.cpp @@ -268,6 +268,8 @@ struct ir_lower_jumps_visitor : public ir_control_flow_visitor { * contains the jump. */ + using ir_control_flow_visitor::visit; + bool progress; struct function_record function; diff --git a/src/compiler/glsl/opt_constant_variable.cpp b/src/compiler/glsl/opt_constant_variable.cpp index a1fffd4a5f1..cc2760f5609 100644 --- a/src/compiler/glsl/opt_constant_variable.cpp +++ b/src/compiler/glsl/opt_constant_variable.cpp @@ -49,6 +49,9 @@ struct assignment_entry { class ir_constant_variable_visitor : public ir_hierarchical_visitor { public: + using ir_hierarchical_visitor::visit; + using ir_hierarchical_visitor::visit_enter; + virtual ir_visitor_status visit_enter(ir_dereference_variable *); virtual ir_visitor_status visit(ir_variable *); virtual ir_visitor_status visit_enter(ir_assignment *); diff --git a/src/compiler/glsl/opt_dead_code_local.cpp b/src/compiler/glsl/opt_dead_code_local.cpp index 3cbc441ac9c..b2d35bbaff8 100644 --- a/src/compiler/glsl/opt_dead_code_local.cpp +++ b/src/compiler/glsl/opt_dead_code_local.cpp @@ -66,6 +66,8 @@ public: class kill_for_derefs_visitor : public ir_hierarchical_visitor { public: + using ir_hierarchical_visitor::visit; + kill_for_derefs_visitor(exec_list *assignments) { this->assignments = assignments;