Skip to content

Commit 3bdec1d

Browse files
author
Willi Braun
committed
- added more information for a triggered Modelica assert
- fixes partially #3074 git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@24606 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 8612d77 commit 3bdec1d

File tree

4 files changed

+35
-47
lines changed

4 files changed

+35
-47
lines changed

Compiler/Template/CodegenC.tpl

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10590,45 +10590,22 @@ template assertCommon(Exp condition, list<Exp> messages, Exp level, Context cont
1059010590
let condVar = daeExp(condition, context, &preExpCond, &varDecls, &auxFunction)
1059110591
let &preExpMsg = buffer ""
1059210592
let msgVar = messages |> message => expToFormatString(message,context,&preExpMsg,&varDecls,&auxFunction) ; separator = ", "
10593-
match level
10594-
case ENUM_LITERAL(index=1) then
10595-
<<
10596-
<%preExpCond%>
10597-
<%assertCommonVar(condVar,msgVar,context,&preExpMsg,&varDecls,info)%>
10598-
>>
10599-
case ENUM_LITERAL(index=2) then
10593+
let omcAssertFunc = match level case ENUM_LITERAL(index=2) then 'omc_assert_warning(' else 'omc_assert(threadData,'
10594+
let addInfoTextContext = match context case FUNCTION_CONTEXT(__) then '' else 'omc_assert_warning(info, "The following assertion has been violated at time %f\n<%Util.escapeModelicaStringToCString(printExpStr(condition))%>\n", time);'
1060010595
let warningTriggered = tempDeclZero("static int", &varDecls)
10596+
let TriggerIf = match level case ENUM_LITERAL(index=2) then 'if(!<%warningTriggered%>)<%\n%>' else ''
10597+
let TriggerVarSet = match level case ENUM_LITERAL(index=2) then '<%warningTriggered%> = 1;<%\n%>' else ''
1060110598
<<
10602-
if(!<%warningTriggered%>)
10599+
<%TriggerIf%>
1060310600
{
1060410601
<%preExpCond%>
1060510602
if(!<%condVar%>)
1060610603
{
1060710604
<%preExpMsg%>
1060810605
FILE_INFO info = {<%infoArgs(info)%>};
10609-
omc_assert_warning(info, <%msgVar%>);
10610-
<%warningTriggered%> = 1;
10611-
}
10612-
}<%\n%>
10613-
>>
10614-
else
10615-
let warningTriggered = tempDeclZero("static int", &varDecls)
10616-
let &preExpLevel = buffer ""
10617-
let levelVar = daeExp(level, context, &preExpLevel, &varDecls, &auxFunction)
10618-
<<
10619-
<%preExpLevel%>
10620-
if(<%levelVar%> == 1 || !<%warningTriggered%>)
10621-
{
10622-
<%preExpCond%>
10623-
if(!<%condVar%>)
10624-
{
10625-
<%preExpMsg%>
10626-
FILE_INFO info = {<%infoArgs(info)%>};
10627-
if (<%levelVar%> == 1)
10628-
omc_assert(threadData, info, <%msgVar%>);
10629-
else
10630-
omc_assert_warning(info, <%msgVar%>);
10631-
<%warningTriggered%> = 1;
10606+
<%addInfoTextContext%>
10607+
<%omcAssertFunc%>info, <%msgVar%>);
10608+
<%TriggerVarSet%>
1063210609
}
1063310610
}<%\n%>
1063410611
>>
@@ -10656,6 +10633,8 @@ template assertCommonVar(Text condVar, Text msgVar, Context context, Text &preEx
1065610633
if(!<%condVar%>)
1065710634
{
1065810635
<%preExpMsg%>
10636+
FILE_INFO info = {<%infoArgs(info)%>};
10637+
omc_assert_warning(info, "The following assertion has been violated at time: %f\n", time);
1065910638
throwStreamPrintWithEquationIndexes(threadData, equationIndexes, <%msgVar%>);
1066010639
}<%\n%>
1066110640
>>

SimulationRuntime/c/simulation/simulation_runtime.cpp

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -917,22 +917,16 @@ static void omc_assert_simulation(threadData_t *threadData, FILE_INFO info, cons
917917
{
918918
case ERROR_EVENTSEARCH:
919919
case ERROR_SIMULATION:
920-
va_start(ap,msg);
921-
fputs("Error: ",stderr);
922-
vfprintf(stderr,msg,ap);
923-
fputs("\n",stderr);
920+
va_start(ap, msg);
921+
va_errorStreamPrint(LOG_ASSERT, 0, msg, ap);
924922
va_end(ap);
925-
fflush(NULL);
926923
longjmp(*threadData->simulationJumpBuffer,1);
927924
break;
928925
case ERROR_NONLINEARSOLVER:
929926
if(ACTIVE_STREAM(LOG_NLS))
930927
{
931-
va_start(ap,msg);
932-
fputs("Error: ",stderr);
933-
vfprintf(stderr,msg,ap);
934-
fputs("\n",stderr);
935-
fflush(NULL);
928+
va_start(ap, msg);
929+
va_errorStreamPrint(LOG_ASSERT, 0, msg, ap);
936930
va_end(ap);
937931
}
938932
#ifndef OMC_EMCC
@@ -942,11 +936,8 @@ static void omc_assert_simulation(threadData_t *threadData, FILE_INFO info, cons
942936
case ERROR_INTEGRATOR:
943937
if(ACTIVE_STREAM(LOG_SOLVER))
944938
{
945-
va_start(ap,msg);
946-
fputs("Error: ",stderr);
947-
vfprintf(stderr,msg,ap);
948-
fputs("\n",stderr);
949-
fflush(NULL);
939+
va_start(ap, msg);
940+
va_errorStreamPrint(LOG_ASSERT, 0, msg, ap);
950941
va_end(ap);
951942
}
952943
longjmp(*threadData->simulationJumpBuffer,1);
@@ -961,7 +952,7 @@ static void omc_assert_warning_simulation(FILE_INFO info, const char *msg, ...)
961952
{
962953
va_list args;
963954
va_start(args, msg);
964-
warningStreamPrint(LOG_ASSERT, 0, msg, args);
955+
va_warningStreamPrint(LOG_ASSERT, 0, msg, args);
965956
va_end(args);
966957
}
967958

SimulationRuntime/c/util/omc_error.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,15 @@ void warningStreamPrint(int stream, int indentNext, const char *format, ...)
379379
}
380380
}
381381

382+
void va_warningStreamPrint(int stream, int indentNext, const char *format, va_list args)
383+
{
384+
if (ACTIVE_WARNING_STREAM(stream)) {
385+
char logBuffer[SIZE_LOG_BUFFER];
386+
vsnprintf(logBuffer, SIZE_LOG_BUFFER, format, args);
387+
messageFunction(LOG_TYPE_WARNING, stream, indentNext, logBuffer, 0, NULL);
388+
}
389+
}
390+
382391
void errorStreamPrint(int stream, int indentNext, const char *format, ...)
383392
{
384393
char logBuffer[SIZE_LOG_BUFFER];
@@ -389,6 +398,13 @@ void errorStreamPrint(int stream, int indentNext, const char *format, ...)
389398
messageFunction(LOG_TYPE_ERROR, stream, indentNext, logBuffer, 0, NULL);
390399
}
391400

401+
void va_errorStreamPrint(int stream, int indentNext, const char *format, va_list args)
402+
{
403+
char logBuffer[SIZE_LOG_BUFFER];
404+
vsnprintf(logBuffer, SIZE_LOG_BUFFER, format, args);
405+
messageFunction(LOG_TYPE_ERROR, stream, indentNext, logBuffer, 0, NULL);
406+
}
407+
392408
#ifdef USE_DEBUG_OUTPUT
393409
void debugStreamPrint(int stream, int indentNext, const char *format, ...)
394410
{

SimulationRuntime/c/util/omc_error.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,10 @@ extern void va_infoStreamPrint(int stream, int indentNext, const char *format, v
162162
extern void infoStreamPrint(int stream, int indentNext, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
163163
extern void infoStreamPrintWithEquationIndexes(int stream, int indentNext, const int *indexes, const char *format, ...) __attribute__ ((format (printf, 4, 5)));
164164
extern void warningStreamPrint(int stream, int indentNext, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
165+
extern void va_warningStreamPrint(int stream, int indentNext, const char *format,va_list ap);
165166
extern void warningStreamPrintWithEquationIndexes(int stream, int indentNext, const int *indexes, const char *format, ...) __attribute__ ((format (printf, 4, 5)));
166167
extern void errorStreamPrint(int stream, int indentNext, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
168+
extern void va_errorStreamPrint(int stream, int indentNext, const char *format, va_list ap);
167169
extern void va_throwStreamPrint(threadData_t *threadData, const char *format, va_list ap) __attribute__ ((noreturn));
168170
extern void throwStreamPrint(threadData_t *threadData, const char *format, ...) __attribute__ ((format (printf, 2, 3), noreturn));
169171
extern void throwStreamPrintWithEquationIndexes(threadData_t *threadData, const int *indexes, const char *format, ...) __attribute__ ((format (printf, 3, 4), noreturn));

0 commit comments

Comments
 (0)