diff options
| author | Jonathan Peyton <jonathan.l.peyton@intel.com> | 2017-10-25 22:05:02 +0000 |
|---|---|---|
| committer | Jonathan Peyton <jonathan.l.peyton@intel.com> | 2017-10-25 22:05:02 +0000 |
| commit | 5e6cb9022c5c87f3ecf593f3210d15fd25467342 (patch) | |
| tree | d61a8fc120afdad83d6be770566b689fb31d517c /openmp/runtime | |
| parent | 8e38ea8b9e09f826677409f7eb9feb142bce13f9 (diff) | |
| download | bcm5719-llvm-5e6cb9022c5c87f3ecf593f3210d15fd25467342.tar.gz bcm5719-llvm-5e6cb9022c5c87f3ecf593f3210d15fd25467342.zip | |
Fix fatal error message displaying
Replacing call to __kmp_msg(kmp_ms_fatal,...) with __kmp_fatal(...) caused an
issue when incomplete message is displayed in case an error message is followed
by another message (e.g. by a hint messa)ge. This is because __kmp_fatal()
passes incomplete list of arguments to __kmp_msg().
Patch by Olga Malysheva
Differential Revision: https://reviews.llvm.org/D39248
llvm-svn: 316623
Diffstat (limited to 'openmp/runtime')
| -rw-r--r-- | openmp/runtime/src/kmp_i18n.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/openmp/runtime/src/kmp_i18n.cpp b/openmp/runtime/src/kmp_i18n.cpp index 757f3b69f7b..42e1c70a382 100644 --- a/openmp/runtime/src/kmp_i18n.cpp +++ b/openmp/runtime/src/kmp_i18n.cpp @@ -38,6 +38,9 @@ kmp_msg_t __kmp_msg_empty = {kmp_mt_dummy, 0, "", 0}; kmp_msg_t __kmp_msg_null = {kmp_mt_dummy, 0, NULL, 0}; static char const *no_message_available = "(No message available)"; +static void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, + va_list ap); + enum kmp_i18n_cat_status { KMP_I18N_CLOSED, // Not yet opened or closed. KMP_I18N_OPENED, // Opened successfully, ready to use. @@ -784,9 +787,7 @@ kmp_msg_t __kmp_msg_error_mesg(char const *mesg) { } // __kmp_msg_error_mesg // ----------------------------------------------------------------------------- -void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, ...) { - - va_list args; +void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, va_list args) { kmp_i18n_id_t format; // format identifier kmp_msg_t fmsg; // formatted message kmp_str_buf_t buffer; @@ -815,7 +816,6 @@ void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, ...) { __kmp_str_free(&fmsg.str); // Format other messages. - va_start(args, message); for (;;) { message = va_arg(args, kmp_msg_t); if (message.type == kmp_mt_dummy && message.str == NULL) { @@ -838,7 +838,6 @@ void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, ...) { __kmp_str_buf_cat(&buffer, fmsg.str, fmsg.len); __kmp_str_free(&fmsg.str); } - va_end(args); // Print formatted messages. // This lock prevents multiple fatal errors on the same problem. @@ -852,8 +851,18 @@ void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, ...) { } // __kmp_msg +void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, ...) { + va_list args; + va_start(args, message); + __kmp_msg(severity, message, args); + va_end(args); +} + void __kmp_fatal(kmp_msg_t message, ...) { - __kmp_msg(kmp_ms_fatal, message, __kmp_msg_null); + va_list args; + va_start(args, message); + __kmp_msg(kmp_ms_fatal, message, args); + va_end(args); #if KMP_OS_WINDOWS // Delay to give message a chance to appear before reaping __kmp_thread_sleep(500); |

