Fix two instances of integer-assignment to string.
authorHenner Zeller <h.zeller@acm.org>
Wed, 15 May 2019 05:01:15 +0000 (22:01 -0700)
committerHenner Zeller <h.zeller@acm.org>
Wed, 15 May 2019 05:01:15 +0000 (22:01 -0700)
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
passes/techmap/libparse.cc

index 0ec7476711650dfe2f9e5f8735578f1bebce4f6a..721ebded4d1b74186c6e69dba079f624566eb53b 100644 (file)
@@ -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);
index 991cc4498b7a458dfc0474366b4f1653aa3608fe..349ccc11505568cc05d6881a11e8706bebb51619 100644 (file)
@@ -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 == '.')