Restore non-deferred code, deferred case to ignore non constant attr
authorEddie Hung <eddie@fpgeh.com>
Thu, 29 Aug 2019 16:02:10 +0000 (09:02 -0700)
committerEddie Hung <eddie@fpgeh.com>
Thu, 29 Aug 2019 16:02:10 +0000 (09:02 -0700)
frontends/ast/ast.cc

index 6a91c418b8135bc63b05a8b00a4c397b8150767a..01e865557fbe0aed6254f5ceccaf4e598ca254ad 100644 (file)
@@ -1073,6 +1073,12 @@ static AstModule* process_module(AstNode *ast, bool defer, AstNode *original_ast
 
                ignoreThisSignalsInInitial = RTLIL::SigSpec();
 
+               for (auto &attr : ast->attributes) {
+                       if (attr.second->type != AST_CONSTANT)
+                               log_file_error(ast->filename, ast->linenum, "Attribute `%s' with non-constant value!\n", attr.first.c_str());
+                       current_module->attributes[attr.first] = attr.second->asAttrConst();
+               }
+
                for (size_t i = 0; i < ast->children.size(); i++) {
                        AstNode *node = ast->children[i];
                        if (node->type == AST_WIRE || node->type == AST_MEMORY)
@@ -1094,11 +1100,12 @@ static AstModule* process_module(AstNode *ast, bool defer, AstNode *original_ast
 
                ignoreThisSignalsInInitial = RTLIL::SigSpec();
        }
-
-       for (auto &attr : ast->attributes) {
-               if (attr.second->type != AST_CONSTANT)
-                       log_file_error(ast->filename, ast->linenum, "Attribute `%s' with non-constant value!\n", attr.first.c_str());
-               current_module->attributes[attr.first] = attr.second->asAttrConst();
+       else {
+               for (auto &attr : ast->attributes) {
+                       if (attr.second->type != AST_CONSTANT)
+                               continue;
+                       current_module->attributes[attr.first] = attr.second->asAttrConst();
+               }
        }
 
        if (ast->type == AST_INTERFACE)