From 5e443a5d0db8f517582818e756871ec2e8117dbe Mon Sep 17 00:00:00 2001
From: Henner Zeller <h.zeller@acm.org>
Date: Tue, 14 May 2019 22:01:15 -0700
Subject: [PATCH] Fix two instances of integer-assignment to string.

o In cover.cc, the int-result of mkstemps() was assigned to a string
  and silently interpreted as a single-character filename with a funny
  value. Fix with the intent: assign the filename.
o in libparse.cc, an int was assigned to a string, but depending on
  visible constructors, this is ambiguous. Explicitly cast this to
  a char.
---
 passes/cmds/cover.cc       | 3 ++-
 passes/techmap/libparse.cc | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/passes/cmds/cover.cc b/passes/cmds/cover.cc
index 0ec747671..721ebded4 100644
--- a/passes/cmds/cover.cc
+++ b/passes/cmds/cover.cc
@@ -105,7 +105,8 @@ struct CoverPass : public Pass {
 			#else
 					char filename_buffer[4096];
 					snprintf(filename_buffer, 4096, "%s/yosys_cover_%d_XXXXXX.txt", filename.c_str(), getpid());
-					filename = mkstemps(filename_buffer, 4);
+					mkstemps(filename_buffer, 4);
+					filename = filename_buffer;
 			#endif
 				}
 				FILE *f = fopen(filename.c_str(), open_mode);
diff --git a/passes/techmap/libparse.cc b/passes/techmap/libparse.cc
index 991cc4498..349ccc115 100644
--- a/passes/techmap/libparse.cc
+++ b/passes/techmap/libparse.cc
@@ -94,7 +94,7 @@ int LibertyParser::lexer(std::string &str)
 
 	// search for identifiers, numbers, plus or minus.
 	if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_' || c == '-' || c == '+' || c == '.') {
-		str = c;
+		str = static_cast<char>(c);
 		while (1) {
 			c = f.get();
 			if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_' || c == '-' || c == '+' || c == '.')