diff options
author | Johannes Reifferscheid <jreiffers@google.com> | 2022-08-03 07:07:55 +0200 |
---|---|---|
committer | Johannes Reifferscheid <jreiffers@google.com> | 2022-08-03 11:08:01 +0200 |
commit | 7ae5d00afaf39fae78e411cb44f665e1dc52b356 (patch) | |
tree | 02f9035e1d0b79e312df9171f7348993c48a5809 /llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp | |
parent | f4b9c0735e339b177d98fe69cf210eea00c0af62 (diff) | |
download | llvm-7ae5d00afaf39fae78e411cb44f665e1dc52b356.zip llvm-7ae5d00afaf39fae78e411cb44f665e1dc52b356.tar.gz llvm-7ae5d00afaf39fae78e411cb44f665e1dc52b356.tar.bz2 |
Fix a stack overflow in ScalarEvolution.
Unfortunately, this overflow is extremely hard to reproduce reliably (in fact, I was unable to do so). The issue is that:
- getOperandsToCreate sometimes skips creating an SCEV for the LHS
- then, createSCEV is called for the BinaryOp
- ... which calls getNoWrapFlagsFromUB
- ... which under certain circumstances calls isSCEVExprNeverPoison
- ... which under certain circumstances requires the SCEVs of all operands
For certain deep dependency trees, this causes a stack overflow.
Reviewed By: bkramer, fhahn
Differential Revision: https://reviews.llvm.org/D129745
Diffstat (limited to 'llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp')
0 files changed, 0 insertions, 0 deletions