i965: Initialize all member variables of cfg_t on construction.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 20 Sep 2013 23:29:48 +0000 (16:29 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 2 Oct 2013 00:30:51 +0000 (17:30 -0700)
The cfg_t object relies on the memory allocator zeroing out its
contents before it's initialized, which is quite an unusual practice
in the C++ world because it ties objects to some specific allocation
scheme, and gives unpredictable results when an object is created with
a different allocator -- Stack allocation, array allocation, or
aggregation inside a different object are some of the useful
possibilities that come to my mind.  Initialize all fields from the
constructor and stop using the zeroing allocator.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_cfg.cpp
src/mesa/drivers/dri/i965/brw_cfg.h

index 02ae37e13cac40bbfb04e38c96c2df010244ef53..33097ebff4f4d56a72bbd594be970fe30273ed59 100644 (file)
@@ -82,6 +82,7 @@ cfg_t::create(void *parent_mem_ctx, exec_list *instructions)
 {
    mem_ctx = ralloc_context(parent_mem_ctx);
    block_list.make_empty();
+   blocks = NULL;
    num_blocks = 0;
    ip = 0;
    cur = NULL;
index 505a5cfdf60beb2e15e8ea9013e49ac4891c3815..ec5a3a02059223bb8a7cb30389580659e5d9ba67 100644 (file)
@@ -60,7 +60,7 @@ public:
 
 class cfg_t {
 public:
-   DECLARE_RZALLOC_CXX_OPERATORS(cfg_t)
+   DECLARE_RALLOC_CXX_OPERATORS(cfg_t)
 
    cfg_t(backend_visitor *v);
    cfg_t(void *mem_ctx, exec_list *instructions);