diff options
author | Nia Waldvogel <[email protected]> | 2022-01-13 13:41:55 -0500 |
---|---|---|
committer | Ayke <[email protected]> | 2022-01-21 14:49:36 +0100 |
commit | 2f57e4ff6dbbe176e065c104e2f419be2b21dd9f (patch) | |
tree | f469075764e7de2cabfcd59cec66569d420a4855 /interp/testdata/interface.out.ll | |
parent | 5e33dccf1ff2340a40d89b95f436554b8bc0e98c (diff) | |
download | tinygo-2f57e4ff6dbbe176e065c104e2f419be2b21dd9f.tar.gz tinygo-2f57e4ff6dbbe176e065c104e2f419be2b21dd9f.zip |
interp: handle type assertions on nil interfaces
Previously, a type assertion on a nil interface would result in an out-of-bounds operand access, as we assumed it was a ptrtoint.
This would usually result in an undefined value which happens not to have the same name as the asserted type (and therefore the assertion fails as expected).
However, with an LLVM build with asserts, LLVM throws an assertion error:
```
interp.test: /home/niaow/go/src/github.com/tinygo-org/tinygo/llvm-project/llvm/include/llvm/IR/User.h:170: llvm::Value* llvm::User::getOperand(unsigned int) const: Assertion `i < NumUserOperands && "getOperand() out of range!"' failed.
```
This change handles a type code of 0 specially.
Diffstat (limited to 'interp/testdata/interface.out.ll')
-rw-r--r-- | interp/testdata/interface.out.ll | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/interp/testdata/interface.out.ll b/interp/testdata/interface.out.ll index 2d2467b67..1fb9249be 100644 --- a/interp/testdata/interface.out.ll +++ b/interp/testdata/interface.out.ll @@ -2,6 +2,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64--linux" @main.v1 = local_unnamed_addr global i1 true [email protected] = local_unnamed_addr global i1 false define void @runtime.initAll() unnamed_addr { entry: |