glsl: Switch ast_node to the non-zeroing allocator.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 20 Sep 2013 22:36:38 +0000 (15:36 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 2 Oct 2013 00:30:51 +0000 (17:30 -0700)
All member variables of ast_node are already being initialized from
its constructor, but some of its derived classes were leaving members
uninitialized -- Fix them.

Using rzalloc makes it more likely that we will start relying on the
allocator to zero out all memory if the class is ever extended with
new member variables.  That's bad 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.

v2: Use NULL initialization instead of default construction for pointers.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/ast.h
src/glsl/glsl_parser_extras.cpp

index c3361a10662cd25d963f04ea525b4f09349a09e5..320e8ddd0e5472ab89cff3e6ac1da864388c66f1 100644 (file)
@@ -49,7 +49,7 @@ struct YYLTYPE;
  */
 class ast_node {
 public:
-   DECLARE_RZALLOC_CXX_OPERATORS(ast_node);
+   DECLARE_RALLOC_CXX_OPERATORS(ast_node);
 
    /**
     * Print an AST node in something approximating the original GLSL code
@@ -576,6 +576,10 @@ public:
    virtual void print(void) const;
    bool has_qualifiers() const;
 
+   ast_fully_specified_type() : qualifier(), specifier(NULL)
+   {
+   }
+
    const struct glsl_type *glsl_type(const char **name,
                                     struct _mesa_glsl_parse_state *state)
       const;
@@ -859,6 +863,10 @@ public:
 
 class ast_function_definition : public ast_node {
 public:
+   ast_function_definition() : prototype(NULL), body(NULL)
+   {
+   }
+
    virtual void print(void) const;
 
    virtual ir_rvalue *hir(exec_list *instructions,
index 3bc8d48277539de4664cb42c7526339b8a8c7704..4f2f2893a90128b95c7cc9718db5870faffc09ca 100644 (file)
@@ -1050,7 +1050,8 @@ ast_expression::print(void) const
 ast_expression::ast_expression(int oper,
                               ast_expression *ex0,
                               ast_expression *ex1,
-                              ast_expression *ex2)
+                              ast_expression *ex2) :
+   primary_expression()
 {
    this->oper = ast_operators(oper);
    this->subexpressions[0] = ex0;