We do research in the LLVM libraries, and we found that the IR library sometimes reaches call stacks of up to 29 method calls.
Sometimes, when I see some glitches in the iOS infrastructures, I also observe fairly deep call stacks.
My question is, can we reason about whether there can be something wrong with the design of the code that calls itself at such a large level of depth.
Here is an example:
/usr/local/LLVM/llvm/unittests/IR/AttributesTest.cpp:54 /usr/local/LLVM/llvm/lib/IR/LLVMContext.cpp:162 /usr/local/LLVM/llvm/lib/IR/LLVMContext.cpp:162 /usr/local/LLVM/llvm/lib/IR/LLVMContextImpl.cpp:54 /usr/local/LLVM/llvm/lib/IR/LLVMContextImpl.cpp:59 /usr/local/LLVM/llvm/lib/IR/Module.cpp:60 /usr/local/LLVM/llvm/lib/IR/Module.cpp:62 /usr/local/LLVM/llvm/lib/IR/Module.cpp:456 /usr/local/LLVM/llvm/lib/IR/Function.cpp:350 /usr/local/LLVM/llvm/lib/IR/BasicBlock.cpp:98 /usr/local/LLVM/llvm/include/llvm/ADT/ilist.h:282 /usr/local/LLVM/llvm/include/llvm/ADT/ilist.h:267 /usr/local/LLVM/llvm/lib/IR/SymbolTableListTraitsImpl.h:76 /usr/local/LLVM/llvm/lib/IR/BasicBlock.cpp:90 /usr/local/LLVM/llvm/lib/IR/SymbolTableListTraitsImpl.h:58 /usr/local/LLVM/llvm/lib/IR/ValueSymbolTable.cpp:75 /usr/local/LLVM/llvm/lib/IR/ValueSymbolTable.cpp:47 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:132 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:112 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:122 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:96 /usr/local/LLVM/llvm/include/llvm/IR/Value.h:777 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:132 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:122 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:75 /usr/local/LLVM/llvm/include/llvm/IR/Value.h:771 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:132 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:122 /usr/local/LLVM/llvm/include/llvm/Support/Casting.h:75 /usr/local/LLVM/llvm/include/llvm/IR/Value.h:759
PS An example call stack is actually created by the destructor of the LLVMContext: class LLVMContext::~LLVMContext(). This is another example from a very old post from the Java world: Java call stack - from HTTP to JDBC as an image .
LLVMContext::~LLVMContext()
, , - , .
"", .
, , , . ; , , . . -.
, , , . , : "" ( ) . ++. , . , , - , . !
, : ? "".
, , , , "" : - , - . , , (2) 14 . , .
: - ++. ++ , - . C, , . "" ; C (3) .
, , . : - . , , , , , , .
Source: https://habr.com/ru/post/1665176/More articles:https://translate.googleusercontent.com/translate_c?depth=1&pto=aue&rurl=translate.google.com&sl=ru&sp=nmt4&tl=en&u=https://fooobar.com/questions/1665171/how-to-get-responses-to-utmetadata-piece-request-nodejs-bit-torrent-bep-0009&usg=ALkJrhhDfZgb1q7SSr-Ud1KmV0QALDp-iQWhat means ":?" average value in javascript source code - javascriptdefault value in ng options with condition - javascriptOpenXML analysis with elements that are also siblings of the same name - xmlJacoco standalone equipment Gradle script - javaCan I combine multiple TensorFlow charts into one? - pythonTransferring JSON data from server to client using Flask - jsonRemoving highlighting of words with errors with content ability = "false" - javascriptVery slow writing of data file to file on Spark cluster - exportWhy is a class called an abstraction of an object? - javaAll Articles