When walking around the recent bug issue, I try to build the binary with sanitizer, and I find there are some undefined behavior and memory leak in the code, such as:
> ./src/bin/lpython ./tests/expr1.py
/home/xxx/lpython/src/lpython/python_ast.h:7728:13: runtime error: load of value 2, which is not a valid value for type 'bool'
/home/xxx/lpython/src/lpython/python_ast.h:7420:13: runtime error: load of value 2, which is not a valid value for type 'bool'
/home/xxx/lpython/src/lpython/python_ast.h:7388:13: runtime error: load of value 2, which is not a valid value for type 'bool'
...
Indirect leak of 25 byte(s) in 1 object(s) allocated from:
#0 0x151d8d6aff67 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x56483ddc56ad in llvm::TargetMachine::TargetMachine(llvm::Target const&, llvm::StringRef, llvm::Triple const&, llvm::StringRef, llvm::StringRef, llvm::TargetOptions const&) (/home/zzh/lpython/src/bin/lpython+0x154556ad)
#2 0x100000000 (<unknown module>)
Indirect leak of 24 byte(s) in 1 object(s) allocated from:
#0 0x151d8d6aff67 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x56483d53f3c6 in llvm::X86TargetMachine::getSubtargetImpl(llvm::Function const&) const (/home/zzh/lpython/src/bin/lpython+0x14bcf3c6)
Indirect leak of 24 byte(s) in 1 object(s) allocated from:
#0 0x151d8d6aff67 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x56483ddc353e in llvm::TargetLoweringObjectFile::Initialize(llvm::MCContext&, llvm::TargetMachine const&) (/home/zzh/lpython/src/bin/lpython+0x1545353e)
Indirect leak of 23 byte(s) in 1 object(s) allocated from:
#0 0x151d8d6aff67 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x56483e7db39e in llvm::ValueSymbolTable::createValueName(llvm::StringRef, llvm::Value*) (/home/zzh/lpython/src/bin/lpython+0x15e6b39e)
Indirect leak of 16 byte(s) in 1 object(s) allocated from:
#0 0x151d8d6aff67 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x56483d5381d4 in llvm::X86Subtarget::X86Subtarget(llvm::Triple const&, llvm::StringRef, llvm::StringRef, llvm::X86TargetMachine const&, llvm::MaybeAlign, unsigned int, unsigned int) (/home/zzh/lpython/src/bin/lpython+0x14bc81d4)
SUMMARY: AddressSanitizer: 318134 byte(s) leaked in 392 allocation(s).
You can modify the build1.sh script to add sanitizer into the binary the check the problem:
It seems that we haven't considered add sanitizer into our CI testing. So existing codebase will give an memory leak on even simple a+b problem. I think it may be related to #2498 and #2544
When walking around the recent bug issue, I try to build the binary with sanitizer, and I find there are some undefined behavior and memory leak in the code, such as:
You can modify the
build1.sh
script to add sanitizer into the binary the check the problem:It seems that we haven't considered add sanitizer into our CI testing. So existing codebase will give an memory leak on even simple
a+b
problem. I think it may be related to #2498 and #2544