Merge pull request #2626 from zachjs/param-no-default
[yosys.git] / kernel / driver.cc
index 9040408bc0dc58c71b282b7f666908be611c54e2..b55f0283709d243814299f9651eadeeae8cb6d62 100644 (file)
@@ -155,6 +155,19 @@ int yosys_history_offset = 0;
 std::string yosys_history_file;
 #endif
 
+#if defined(__wasm)
+extern "C" {
+       // FIXME: WASI does not currently support exceptions.
+       void* __cxa_allocate_exception(size_t thrown_size) throw() {
+               return malloc(thrown_size);
+       }
+       bool __cxa_uncaught_exception() throw();
+       void __cxa_throw(void* thrown_exception, struct std::type_info * tinfo, void (*dest)(void*)) {
+               std::terminate();
+       }
+}
+#endif
+
 void yosys_atexit()
 {
 #if defined(YOSYS_ENABLE_READLINE) || defined(YOSYS_ENABLE_EDITLINE)
@@ -254,9 +267,11 @@ int main(int argc, char **argv)
                printf("\n");
                printf("    -s scriptfile\n");
                printf("        execute the commands in the script file\n");
+#ifdef YOSYS_ENABLE_TCL
                printf("\n");
                printf("    -c tcl_scriptfile\n");
                printf("        execute the commands in the tcl script file (see 'help tcl' for details)\n");
+#endif
                printf("\n");
                printf("    -p command\n");
                printf("        execute the commands\n");
@@ -413,22 +428,13 @@ int main(int argc, char **argv)
                        scriptfile_tcl = true;
                        break;
                case 'W':
-                       log_warn_regexes.push_back(std::regex(optarg,
-                                       std::regex_constants::nosubs |
-                                       std::regex_constants::optimize |
-                                       std::regex_constants::egrep));
+                       log_warn_regexes.push_back(YS_REGEX_COMPILE(optarg));
                        break;
                case 'w':
-                       log_nowarn_regexes.push_back(std::regex(optarg,
-                                       std::regex_constants::nosubs |
-                                       std::regex_constants::optimize |
-                                       std::regex_constants::egrep));
+                       log_nowarn_regexes.push_back(YS_REGEX_COMPILE(optarg));
                        break;
                case 'e':
-                       log_werror_regexes.push_back(std::regex(optarg,
-                                       std::regex_constants::nosubs |
-                                       std::regex_constants::optimize |
-                                       std::regex_constants::egrep));
+                       log_werror_regexes.push_back(YS_REGEX_COMPILE(optarg));
                        break;
                case 'D':
                        vlog_defines.push_back(optarg);
@@ -558,6 +564,10 @@ int main(int argc, char **argv)
                fprintf(f, "\n");
        }
 
+       if (log_expect_no_warnings && log_warnings_count_noexpect)
+               log_error("Unexpected warnings found: %d unique messages, %d total, %d expected\n", GetSize(log_warnings),
+                                       log_warnings_count, log_warnings_count - log_warnings_count_noexpect);
+
        if (print_stats)
        {
                std::string hash = log_hasher->final().substr(0, 10);
@@ -592,9 +602,11 @@ int main(int argc, char **argv)
                        ru_buffer.ru_utime.tv_usec += ru_buffer_children.ru_utime.tv_usec;
                        ru_buffer.ru_stime.tv_sec += ru_buffer_children.ru_stime.tv_sec;
                        ru_buffer.ru_stime.tv_usec += ru_buffer_children.ru_stime.tv_usec;
+#if defined(__linux__) || defined(__FreeBSD__)
                        ru_buffer.ru_maxrss = std::max(ru_buffer.ru_maxrss, ru_buffer_children.ru_maxrss);
+#endif
                }
-#  if defined(__linux__) || defined(__FreeBSD__)
+#if defined(__linux__) || defined(__FreeBSD__)
                meminfo = stringf(", MEM: %.2f MB peak",
                                ru_buffer.ru_maxrss / 1024.0);
 #endif
@@ -664,6 +676,8 @@ int main(int argc, char **argv)
        }
 #endif
 
+       log_check_expected();
+
        yosys_atexit();
 
        memhasher_off();