diff options
author | Zachary Snow <zach@zachjs.com> | 2021-02-18 12:04:02 -0500 |
---|---|---|
committer | Zachary Snow <zach@zachjs.com> | 2021-02-19 09:18:41 -0500 |
commit | 220cb1f7bbf6405117b953526c50a21a5ef5788f (patch) | |
tree | c3fe7d79380e9bf2c73c56543f5461715e0a0395 /frontends | |
parent | 127484e675538fbaeca1f6e53ba264a1f02e9cf6 (diff) | |
download | yosys-220cb1f7bbf6405117b953526c50a21a5ef5788f.tar.gz yosys-220cb1f7bbf6405117b953526c50a21a5ef5788f.tar.bz2 yosys-220cb1f7bbf6405117b953526c50a21a5ef5788f.zip |
verilog: error on macro invocations with missing argument lists
This would previously complain about an undefined internal macro if the
unapplied macro had not already been used. If it had, it would
incorrectly use the arguments from the previous invocation.
Diffstat (limited to 'frontends')
-rw-r--r-- | frontends/verilog/preproc.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/frontends/verilog/preproc.cc b/frontends/verilog/preproc.cc index c451c4c20..de707593f 100644 --- a/frontends/verilog/preproc.cc +++ b/frontends/verilog/preproc.cc @@ -477,7 +477,16 @@ static bool try_expand_macro(define_map_t &defines, std::string &tok) std::string name = tok.substr(1); std::string skipped_spaces = skip_spaces(); tok = next_token(false); - if (tok == "(" && body->has_args) { + if (body->has_args) { + if (tok != "(") { + if (tok.size() == 1 && iscntrl(tok[0])) { + char buf[5]; + snprintf(buf, sizeof(buf), "\\x%02x", tok[0]); + tok = buf; + } + log_error("Expected to find '(' to begin macro arguments for '%s', but instead found '%s'\n", + name.c_str(), tok.c_str()); + } std::vector<std::string> args; bool done = false; while (!done) { |