Opened 10 years ago

Closed 9 years ago

Last modified 9 years ago

#3345 closed defect (fixed)

omc crashes with stack overflow

Reported by: Alexander Täschner <A.Taeschner@…> Owned by: Lennart Ochel
Priority: critical Milestone: 1.9.4
Component: Code Generation Version: trunk
Keywords: Cc:

Description

Trying to find a workaround for bug #3089 for the HelmholtzMedia library, I slightly changed the inner structure of the model. With this changes omc can flatten the model, but crashes with a stack overflow while generating the simulation code:

Unhandled exception at 0x020992F8 (libOpenModelicaCompiler.dll) in omc.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00412F58).

One can test it with the test.mos at <https://github.com/AlexanderTaeschner/HelmholtzMedia/tree/master/HelmholtzMedia>.

The command line "c:\OpenModelica1.9.2Nightly\bin\omc.exe +d=dumpdaelow,optdaedump,bltdump,dumpindxdae,backenddaeinfo test.mos > test.log 2>&1" produced the attached "test.log". The used omc version on windows is 1.9.2+dev (r24630).

Attachments (7)

test.log (1.3 MB ) - added by Alexander Täschner <A.Taeschner@…> 10 years ago.
Log file
HeliumTestModel_Total.mo (232.7 KB ) - added by Alexander Täschner <A.Taeschner@…> 10 years ago.
Save total file of the model.
Test_HeliumTestModel_Total.mos (186 bytes ) - added by Alexander Täschner <A.Taeschner@…> 10 years ago.
Test script for the save total model.
stacktrace.log (3.5 MB ) - added by Martin Sjölund 9 years ago.
differentiation.log (40.0 KB ) - added by Martin Sjölund 9 years ago.
HeliumTestModel_Total_v2.mo (230.2 KB ) - added by Alexander Täschner <A.Taeschner@…> 9 years ago.
Updated save total file for solving the differentiation module problem.
test_total_v2_noflags.log (9.3 KB ) - added by Alexander Täschner <A.Taeschner@…> 9 years ago.
Build log using omc from current nightly without any flags.

Change History (22)

by Alexander Täschner <A.Taeschner@…>, 10 years ago

Attachment: test.log added

Log file

comment:1 by Alexander Täschner <A.Taeschner@…>, 10 years ago

I just retested with the current nightly build for Windows (v1.9.3-dev-790-gb3abd2b) and the result is the same: omc crashes with a stack overflow. (For the tests I had to remove the HelmholtzMedia folder in omlibrary.)

comment:2 by Alexander Täschner <A.Taeschner@…>, 10 years ago

Priority: highcritical

by Alexander Täschner <A.Taeschner@…>, 10 years ago

Attachment: HeliumTestModel_Total.mo added

Save total file of the model.

by Alexander Täschner <A.Taeschner@…>, 10 years ago

Test script for the save total model.

comment:3 by Alexander Täschner <A.Taeschner@…>, 10 years ago

Added the save total file and a matching test script.

comment:4 by Alexander Täschner <A.Taeschner@…>, 9 years ago

I just retested the save total model using the current nightly build (omc version v1.9.3-dev-1199-ge7091b6 without any changes to the installed contents) using

c:\OpenModelica1.9.3Nightly\bin\omc.exe +d=dumpdaelow,optdaedump,bltdump,dumpindxdae,backenddaeinfo Test_HeliumTestModel_Total.mos > log.txt 2>&1

The result is the same: after creating and compiling about 20 C files to 10 dll files the compiler crashes with the following error

Unhandled exception at 0x696C1998 (libOpenModelicaCompiler.dll) in omc.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00412E08).

If you can't recreate the problem, maybe it would be possible to give me a debug build of the compiler, so that I can create a proper stack trace.

in reply to:  4 comment:5 by Martin Sjölund, 9 years ago

Replying to Alexander Täschner <A.Taeschner@…>:

If you can't recreate the problem, maybe it would be possible to give me a debug build of the compiler, so that I can create a proper stack trace.

The Linux build is compiled using -rdynamic and will produce good stack traces.

by Martin Sjölund, 9 years ago

Attachment: stacktrace.log added

comment:6 by Martin Sjölund, 9 years ago

Cycles over the following functions:

[bt] #174          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(boxptr_EvaluateFunctions_evaluateConstantFunctionWrapper+0x12) [0x7faba372b842]
[bt] #175          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_Expression_traverseExpTopDown+0x67) [0x7faba3b89c37]
[bt] #176          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateStatement+0x381) [0x7faba3726ab1]
[bt] #177          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateStatementEmptyRepl+0x8d) [0x7faba37266bd]
[bt] #178          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(boxptr_EvaluateFunctions_evaluateFunctions__updateStatementEmptyRepl+0x15) [0x7faba3728d35]
[bt] #179          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_List_mapFold2+0x9d) [0x7faba380dfad]
[bt] #180          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_predictIfOutput+0x36c) [0x7faba372623c]
[bt] #181          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateStatement+0x1f09) [0x7faba3728639]
[bt] #182          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateStatementEmptyRepl+0x8d) [0x7faba37266bd]
[bt] #183          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(boxptr_EvaluateFunctions_evaluateFunctions__updateStatementEmptyRepl+0x15) [0x7faba3728d35]
[bt] #184          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_List_mapFold2+0x9d) [0x7faba380dfad]
[bt] #185          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_predictIfOutput+0x36c) [0x7faba372623c]
[bt] #186          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateStatement+0x1f09) [0x7faba3728639]
[bt] #187          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateIfStatement+0x529) [0x7faba372c4a9]
[bt] #188          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateStatement+0x1704) [0x7faba3727e34]
[bt] #189          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateStatement+0x2427) [0x7faba3728b57]
[bt] #190          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateFunctions__updateAlgElements+0x278) [0x7faba372c958]
[bt] #191          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_List_mapFold+0x82) [0x7faba380db22]
[bt] #192          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateConstantFunction+0x7e7) [0x7faba372acd7]
[bt] #193          /home/marsj/OpenModelica/build/bin/../lib/x86_64-linux-gnu/omc/libOpenModelicaCompiler.so(omc_EvaluateFunctions_evaluateConstantFunctionWrapper+0x2d2) [0x7faba372a392]

comment:7 by Martin Sjölund, 9 years ago

Using the following flags gets further, but the differentiation module also loops:
--preOptModules=unitChecking,evaluateReplaceProtectedFinalEvaluateParameters,stateMachineElab,simplifyIfEquations,expandDerOperator,removeEqualFunctionCalls,clockPartitioning,findStateOrder,introduceDerAlias,inputDerivativesForDynOpt,replaceEdgeChange,inlineArrayEqn,comSubExp,resolveLoops,sortEqnsVars --postOptModules=

I think some function call is recursively inlined, causing the recursion. The differentiation and evaluation modules should have a maximum recursion depth (in addition to some caching mechanism).

comment:8 by Martin Sjölund, 9 years ago

Fixing the Differentiate module to stop when it detects recursion translates the model (but it does not compile). The following messages are given (probably a derivative annotation is necessary): differentiation.log

Last edited 9 years ago by Martin Sjölund (previous) (diff)

by Martin Sjölund, 9 years ago

Attachment: differentiation.log added

comment:9 by Alexander Täschner <A.Taeschner@…>, 9 years ago

Thank you for the update! I retestet using the latest Windows nightly with the following results:

  • simply running omc on the save total file crashes as before
  • using your additional commands produces the internal errors in the differentiation module as you described
  • removing the two function redeclares of density_derp_h and density_derh_p (delete lines 2656 to 2708) solve the differentition errors, but still crashes omc (when used without the special flags)

by Alexander Täschner <A.Taeschner@…>, 9 years ago

Attachment: HeliumTestModel_Total_v2.mo added

Updated save total file for solving the differentiation module problem.

comment:10 by Alexander Täschner <A.Taeschner@…>, 9 years ago

I did further tests of the preOptModules and postOptModules. The following default flags lead to a stack overflow if they are added:

  • preOptModules: removeSimpleEquations, evalFunc
  • postOptModules: removeSimpleEquations

All the other modules together, which are used per default (according to omc.exe --help=optmodules), generate code, which does not compile due
to undeclared variables.

comment:11 by Alexander Täschner <A.Taeschner@…>, 9 years ago

I retested the model using the current Windows nightly (OpenModelica-v1.9.4-dev-94-ge7263fe.exe) with the following results:

  • Using the unmodified save total file and no additional flags gives an internal error "Differentiation failed due to recursion".
  • Using the modified save total (*_v2*) file and no additional flags does not crash anymore, but the build fails due to undeclared symbols (see log file).

by Alexander Täschner <A.Taeschner@…>, 9 years ago

Attachment: test_total_v2_noflags.log added

Build log using omc from current nightly without any flags.

comment:12 by Alexander Täschner <A.Taeschner@…>, 9 years ago

Resolution: fixed
Status: newclosed

comment:13 by Dietmar Winkler, 9 years ago

Milestone: Future1.9.4

Sorting these closed tickets away from "Future". Since they were closed after the last 1.9.3 release, it's very likely that they should have been part of the 1.9.4 release.

comment:14 by Martin Sjölund, 9 years ago

Milestone: 1.9.41.9.4-1.9.x

Milestone renamed

comment:15 by Martin Sjölund, 9 years ago

Milestone: 1.9.4-1.9.x1.9.4

Milestone renamed

Note: See TracTickets for help on using tickets.