python-clang 因段错误而崩溃

标签 python c++ clang abstract-syntax-tree bitcoin

我有以下简单的 python 代码,它使用 libclang python 绑定(bind)遍历 AST,不幸的是它因段错误而崩溃。 我正在使用 python2.7 并尝试了以下所有 clang 版本 3.8、3.9、4.0、5.0、6.0(当然每个版本都使用了正确的 python clang 绑定(bind))

import clang.cindex

def traverse(node):
    print("%-42s %-20s %-10s %-6s %s" % (node.kind, node.spelling, node.type.spelling, node.location.line, node.mangled_name))
    for child in node.get_children():
        traverse(child)

clang.cindex.Config.set_library_file('/usr/lib/llvm-3.8/lib/libclang.so')
index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1], args=['-Werror'])
traverse(tu.cursor)

回溯:

#0  clang::TagType::getDecl (this=0x0) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/Type.cpp:2962
#1  0x00007f9ecbe65caf in clang::RecordType::getDecl (this=<optimized out>) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/include/clang/AST/Type.h:3554
#2  (anonymous namespace)::CXXNameMangler::mangleUnqualifiedName (this=this@entry=0x7ffe35f45470, ND=ND@entry=0x7f9ec0092cc8, Name=..., 
    AdditionalAbiTags=AdditionalAbiTags@entry=0x7ffe35f453c0, KnownArity=4294967295)
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:1184
#3  0x00007f9ecbe60250 in (anonymous namespace)::CXXNameMangler::mangleUnqualifiedName (AdditionalAbiTags=0x7ffe35f453c0, ND=<optimized out>, this=0x7ffe35f45470)
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:481
#4  (anonymous namespace)::CXXNameMangler::mangleLocalName (this=this@entry=0x7ffe35f45470, D=D@entry=0x7f9ec0092cc8, AdditionalAbiTags=AdditionalAbiTags@entry=0x7ffe35f453c0, 
    ExcludeUnqualifiedName=ExcludeUnqualifiedName@entry=false) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:1471
#5  0x00007f9ecbe607b7 in (anonymous namespace)::CXXNameMangler::mangleNameWithAbiTags (this=this@entry=0x7ffe35f45470, ND=ND@entry=0x7f9ec0092cc8, 
    AdditionalAbiTags=AdditionalAbiTags@entry=0x7ffe35f453c0, ExcludeUnqualifiedName=ExcludeUnqualifiedName@entry=false)
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:801
#6  0x00007f9ecbe61621 in (anonymous namespace)::CXXNameMangler::mangleName (this=0x7ffe35f45470, ND=0x7f9ec0092cc8, ExcludeUnqualifiedName=<optimized out>)
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:776
#7  0x00007f9ecbe62822 in (anonymous namespace)::ItaniumMangleContextImpl::mangleCXXName (this=<optimized out>, D=0x7f9ec0092cc8, Out=...)
    at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/lib/AST/ItaniumMangle.cpp:4422
#8  0x00007f9ecbd4df6b in clang_Cursor_getMangling (C=...) at /build/llvm-toolchain-3.8-_PD09B/llvm-toolchain-3.8-3.8/tools/clang/tools/libclang/CIndex.cpp:3996
#9  0x00007f9eccbd2e40 in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#10 0x00007f9eccbd28ab in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6

我在来自 github 的比特币源代码上运行 python 代码,这个回溯是针对文件 src/bitcoin-cli.cpp

知道为什么会崩溃吗? 谢谢,萨吉

最佳答案

这看起来像是一个错误,正在此处进行跟踪:https://bugs.llvm.org/show_bug.cgi?id=34484

关于python-clang 因段错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45901636/

相关文章:

c++ - 如何使用 clangd 支持为 C++ 设置 VS 代码?

python - 如何在pytorch中进行渐变裁剪?

python - 如何从python中dict的键值分配多个变量值?

c++ - 动态分配一个二维数组

c++ - C++如何用雅可比法求解n个方程?

c - (在哪里)clang 是否记录了实现定义的行为?

c - 为什么编译器不优化掉这些无法访问的指令呢?

python - 通过排除 Pandas 中另一列中的特定值来填充一列

Python - 使用 Google 日历 API

c++ - 中心有引力的球体