DFFLIBMAP: changed 'missing pin' error into a warning with additional reason/info.
authorNiels Moseley <n.a.moseley@moseleyinstrumnets.com>
Tue, 6 Nov 2018 11:11:52 +0000 (12:11 +0100)
committerNiels Moseley <n.a.moseley@moseleyinstrumnets.com>
Tue, 6 Nov 2018 11:11:52 +0000 (12:11 +0100)
passes/techmap/dfflibmap.cc

index 421073485dc93e669e88abc6afe93534f21ac1bd..b0528d473fbc3e3a686b0333aa11d8c99837ce06 100644 (file)
@@ -101,7 +101,16 @@ static bool parse_pin(LibertyAst *cell, LibertyAst *attr, std::string &pin_name,
                if (child->id == "pin" && child->args.size() == 1 && child->args[0] == pin_name)
                        return true;
 
-       log_error("Malformed liberty file - cannot find pin '%s' in cell '%s'.\n", pin_name.c_str(), cell->args[0].c_str());
+       /* If we end up here, the pin specified in the attribute does not exist, which is an error,
+          or, the attribute contains an expression which we do not yet support.
+       For now, we'll simply produce a warning to let the user know something is up.
+       */
+       if (pin_name.find_first_of("^*|&") == std::string::npos) {
+               log_warning("Malformed liberty file - cannot find pin '%s' in cell '%s' - skipping.\n", pin_name.c_str(), cell->args[0].c_str());
+       }
+       else {
+               log_warning("Found unsupported expression '%s' in pin attribute of cell '%s' - skipping.\n", pin_name.c_str(), cell->args[0].c_str());
+       }
 
        return false;
 }