[Mesa-dev] [PATCH] Avoid ASan new-delete-type-mismatch
Ilia Mirkin
imirkin at alum.mit.edu
Thu Jun 9 15:01:59 UTC 2016
Is this all because Graph doesn't have a virtual destructor? We don't
construct/destruct those too often, I'd much rather just make it
virtual rather than moving DominatorTree.
On Thu, Jun 9, 2016 at 10:52 AM, Stephan Bergmann
<stephan.bergmann.secondary at googlemail.com> wrote:
> ...when Function::domTree is created as DominatorTree in Function::convertToSSA
> (src/gallium/drivers/nouveau/codegen/nv50_ir_ssa.cpp) but destroyed only as base
> Graph in ~Function (src/gallium/drivers/nouveau/codegen/nv50_ir_bb.cpp).
> ---
> src/gallium/drivers/nouveau/codegen/nv50_ir.h | 37 +++++++++++++++++++++-
> .../drivers/nouveau/codegen/nv50_ir_ssa.cpp | 37 +---------------------
> 2 files changed, 37 insertions(+), 37 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
> index 94e54bb..c864d56 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
> @@ -1132,6 +1132,41 @@ private:
> void splitCommon(Instruction *, BasicBlock *, bool attach);
> };
>
> +// DominatorTree implements an algorithm for finding immediate dominators,
> +// as described by T. Lengauer & R. Tarjan.
> +class DominatorTree : public Graph
> +{
> +public:
> + DominatorTree(Graph *cfg);
> + ~DominatorTree() { }
> +
> + bool dominates(BasicBlock *, BasicBlock *);
> +
> + void findDominanceFrontiers();
> +
> +private:
> + void build();
> + void buildDFS(Node *);
> +
> + void squash(int);
> + inline void link(int, int);
> + inline int eval(int);
> +
> + void debugPrint();
> +
> + Graph *cfg;
> +
> + Node **vert;
> + int *data;
> + const int count;
> +
> + #define SEMI(i) (data[(i) + 0 * count])
> + #define ANCESTOR(i) (data[(i) + 1 * count])
> + #define PARENT(i) (data[(i) + 2 * count])
> + #define LABEL(i) (data[(i) + 3 * count])
> + #define DOM(i) (data[(i) + 4 * count])
> +};
> +
> class Function
> {
> public:
> @@ -1171,7 +1206,7 @@ public:
>
> Graph cfg;
> Graph::Node *cfgExit;
> - Graph *domTree;
> + DominatorTree *domTree;
> Graph::Node call; // node in the call graph
>
> BasicBlock **bbArray; // BBs in emission order
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_ssa.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_ssa.cpp
> index 3d25ad9..9652b72 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_ssa.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_ssa.cpp
> @@ -27,41 +27,6 @@ namespace nv50_ir {
>
> // Converts nv50 IR generated from TGSI to SSA form.
>
> -// DominatorTree implements an algorithm for finding immediate dominators,
> -// as described by T. Lengauer & R. Tarjan.
> -class DominatorTree : public Graph
> -{
> -public:
> - DominatorTree(Graph *cfg);
> - ~DominatorTree() { }
> -
> - bool dominates(BasicBlock *, BasicBlock *);
> -
> - void findDominanceFrontiers();
> -
> -private:
> - void build();
> - void buildDFS(Node *);
> -
> - void squash(int);
> - inline void link(int, int);
> - inline int eval(int);
> -
> - void debugPrint();
> -
> - Graph *cfg;
> -
> - Node **vert;
> - int *data;
> - const int count;
> -
> - #define SEMI(i) (data[(i) + 0 * count])
> - #define ANCESTOR(i) (data[(i) + 1 * count])
> - #define PARENT(i) (data[(i) + 2 * count])
> - #define LABEL(i) (data[(i) + 3 * count])
> - #define DOM(i) (data[(i) + 4 * count])
> -};
> -
> void DominatorTree::debugPrint()
> {
> for (int i = 0; i < count; ++i) {
> @@ -326,7 +291,7 @@ Function::convertToSSA()
>
> // 1. create the dominator tree
> domTree = new DominatorTree(&cfg);
> - reinterpret_cast<DominatorTree *>(domTree)->findDominanceFrontiers();
> + domTree->findDominanceFrontiers();
>
> // 2. insert PHI functions
> DLList workList;
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list