[LLVMdev] LLVM GlobalStatus possible bug (patch provided)

Christophe Duvernois christophe.duvernois at gmail.com
Sat Nov 29 05:41:57 PST 2014


Hi everyone,

I writed my own pass (which play with global variables). I can call my pass
with "clang++ -mllvm -mypass" and everything is working.
However if I use my pass with optimizations passes like -O2 or -O3, clang
crashs :

0  clang-3.4       0x0000000001b451bb llvm::sys::PrintStackTrace(_IO_FILE*)
+ 38


1  clang-3.4       0x0000000001b45438



2  clang-3.4       0x0000000001b44e8e



3  libpthread.so.0 0x00007fe7708a2340



4  clang-3.4       0x0000000000d5ea1a



5  clang-3.4       0x00000000017c264f



6  clang-3.4       0x00000000017c2c51
llvm::GlobalStatus::analyzeGlobal(llvm::Value const*, llvm::GlobalStatus&)
+ 73


7  clang-3.4       0x000000000115bd78



8  clang-3.4       0x000000000115ca60



9  clang-3.4       0x0000000001160d70



10 clang-3.4       0x0000000001a208aa



11 clang-3.4       0x0000000001a20dc6
llvm::legacy::PassManagerImpl::run(llvm::Module&) + 244



12 clang-3.4       0x0000000001a20fd1
llvm::legacy::PassManager::run(llvm::Module&) + 39



13 clang-3.4       0x0000000001b7d4aa



14 clang-3.4       0x0000000001b7d5f3
clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions
const&, clang::TargetOptions const&, clang::LangOptions const&,
llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 136

15 clang-3.4       0x0000000001b78efe



16 clang-3.4       0x0000000001f00754 clang::ParseAST(clang::Sema&, bool,
bool) + 780


17 clang-3.4       0x0000000001e0b188
clang::ASTFrontendAction::ExecuteAction() + 322



18 clang-3.4       0x0000000001b77f19 clang::CodeGenAction::ExecuteAction()
+ 1145
19 clang-3.4       0x0000000001e0accb clang::FrontendAction::Execute() + 205
20 clang-3.4       0x0000000001de5128
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 564
21 clang-3.4       0x0000000001b4aea1
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1026
22 clang-3.4       0x0000000000c1ac73 cc1_main(char const**, char const**,
char const*, void*) + 717
23 clang-3.4       0x0000000000c15997 main + 785
24 libc.so.6       0x00007fe76fccdec5 __libc_start_main + 245
25 clang-3.4       0x0000000000c14499

After further investigation i fixed the problem (cf patch attached).
In the lib/Transforms/Utils/GlobalStatus.cpp :
const Function *F = I->getParent()->getParent();
There is no check if the first parent is null...

I don't know if this is me doing something wrong and I->getParent() should
never be null or if this is a bug?
I'm working with clang/llvm 3.4 but same problem in 3.5 and trunk ...

Regards,
Christophe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141129/c14a256f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bugfix.patch
Type: text/x-patch
Size: 1038 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141129/c14a256f/attachment.bin>


More information about the llvm-dev mailing list