diff --git a/passes/techmap/libparse.cc b/passes/techmap/libparse.cc index 3d0ebaea3..1a1726f94 100644 --- a/passes/techmap/libparse.cc +++ b/passes/techmap/libparse.cc @@ -236,10 +236,13 @@ LibertyAst *LibertyParser::parse() if (tok == ':' && ast->value.empty()) { tok = lexer(ast->value); - if (tok != 'v') - error(); - tok = lexer(str); - while (tok == '+' || tok == '-' || tok == '*' || tok == '/') { + if (tok != 'v') { + //Synopsys-style unquoted identifiers issue#3498 + } else { + //Liberty canonical identifier including double quotes + tok = lexer(str); + } + while (tok == '+' || tok == '-' || tok == '*' || tok == '/' || tok == '!') { ast->value += tok; tok = lexer(str); if (tok != 'v') diff --git a/tests/liberty/issue3498_bad.lib b/tests/liberty/issue3498_bad.lib new file mode 100755 index 000000000..f85c4e19b --- /dev/null +++ b/tests/liberty/issue3498_bad.lib @@ -0,0 +1,8 @@ +library(fake) { + cell(bugbad) { + bundle(X) { + members(x1, x2); + power_down_function : !a+b ; + } + } +}