C++ 基本函数过程上的LLVM分段错误

C++ 基本函数过程上的LLVM分段错误,c++,clang,llvm,C++,Clang,Llvm,我对LLVM完全陌生。我试着按照程序中的功能进行操作。这是此处定义的函数过程: #include "llvm/Pass.h" #include "llvm/IR/Function.h" #include "llvm/Support/raw_ostream.h" #include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/InstrTypes.h" #include "llvm/Transforms/IPO/PassManagerBuilder

我对LLVM完全陌生。我试着按照程序中的功能进行操作。这是此处定义的函数过程:

#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
using namespace llvm;

namespace {
  struct SkeletonPass : public FunctionPass {
    static char ID;
    SkeletonPass() : FunctionPass(ID) {}

    virtual bool runOnFunction(Function &F) {
      for (auto &B : F) {
        for (auto &I : B) {
          if (auto *op = dyn_cast<BinaryOperator>(&I)) {
            // Insert at the point where the instruction `op` appears.
            IRBuilder<> builder(op);

            // Make a multiply with the same operands as `op`.
            Value *lhs = op->getOperand(0);
            Value *rhs = op->getOperand(1);
            Value *mul = builder.CreateMul(lhs, rhs);

            // Everywhere the old instruction was used as an operand, use our
            // new multiply instruction instead.
            for (auto &U : op->uses()) {
              User *user = U.getUser();  // A User is anything with operands.
              user->setOperand(U.getOperandNo(), mul);
            }

            // We modified the code.
            return true;
          }
        }
      }

      return false;
    }
  };
}

char SkeletonPass::ID = 0;

// Automatically enable the pass.
// http://adriansampson.net/blog/clangpass.html
static void registerSkeletonPass(const PassManagerBuilder &,
                         legacy::PassManagerBase &PM) {
  PM.add(new SkeletonPass());
}
static RegisterStandardPasses
  RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible,
                 registerSkeletonPass);
并使用以下命令运行它:

/usr/local/opt/llvm/bin/clang -Xclang -load -Xclang build/skeleton/libSkeletonPass.so example.c
其中,示例.c是:

#include <stdio.h>
int main(int argc, const char** argv) {
    int num;
    scanf("%i", &num);
    printf("%i\n", num + 2); 
    return 0;
}
#包括
int main(int argc,常量字符**argv){
int-num;
scanf(“%i”和&num);
printf(“%i\n”,num+2);
返回0;
}
我在Mac OS X Mojave上,我使用自制软件安装了LLVM,并将其放在我的路径中

我收到以下错误消息

clang version 9.0.0 (tags/RELEASE_900/final)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /usr/local/Cellar/llvm/9.0.0_1/bin
 "/usr/local/Cellar/llvm/9.0.0_1/bin/clang-9" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name example.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include -internal-isystem /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -fdebug-compilation-dir /Users/BN/Documents/Library/CS/Compilers/LLVM/llvm-pass-skeleton -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -load build/skeleton/libSkeletonPass.so -o /var/folders/cf/1_hzh5h91x90j4xx_h1mlb4w0000gp/T/example-4b27ba.o -x c example.c
clang -cc1 version 9.0.0 based upon LLVM 9.0.0 default target x86_64-apple-darwin18.7.0
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
Stack dump:
0.  Program arguments: /usr/local/Cellar/llvm/9.0.0_1/bin/clang-9 -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name example.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include -internal-isystem /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -fdebug-compilation-dir /Users/BN/Documents/Library/CS/Compilers/LLVM/llvm-pass-skeleton -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -load build/skeleton/libSkeletonPass.so -o /var/folders/cf/1_hzh5h91x90j4xx_h1mlb4w0000gp/T/example-4b27ba.o -x c example.c 
0  clang-9                  0x00000001071fba46 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1  clang-9                  0x00000001071fbe98 SignalHandler(int) + 180
2  libsystem_platform.dylib 0x00007fff6f2aeb5d _sigtramp + 29
3  libsystem_platform.dylib 0x0000000000000001 _sigtramp + 18446603338651079873
4  clang-9                  0x0000000106e94485 llvm::object_deleter<llvm::SmallVector<std::__1::pair<llvm::PassManagerBuilder::ExtensionPointTy, std::__1::function<void (llvm::PassManagerBuilder const&, llvm::legacy::PassManagerBase&)> >, 8u> >::call(void*) + 19
5  clang-9                  0x00000001071abc95 llvm::llvm_shutdown() + 53
6  clang-9                  0x0000000107193061 llvm::InitLLVM::~InitLLVM() + 15
7  clang-9                  0x0000000106034857 main + 7249
8  libdyld.dylib            0x00007fff6f0c33d5 start + 1
clang-9: error: unable to execute command: Segmentation fault: 11
clang-9: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 9.0.0 (tags/RELEASE_900/final)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /usr/local/Cellar/llvm/9.0.0_1/bin
clang-9: note: diagnostic msg: PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
clang-9: error: unable to execute command: Segmentation fault: 11
clang-9: note: diagnostic msg: Error generating preprocessed source(s).
clang 9.0.0版(标签/发行版\u 900/最终版)
目标:x86_64-apple-darwin18.7.0
线程模型:posix
InstalledDir:/usr/local/cillar/llvm/9.0.0_1/bin
“/usr/local/ceral/llvm/9.0.0_1/bin/clang-9”-cc1-triple x86_64-apple-macosx10.14.0-Wdeprecated objc isa用法-Werror=不推荐的objc isa用法-emit obj-mrelax all-disable free-disable llvm验证器-discard value name-main file name example.c-mrelocation model pic-pic level 2-mthread model posix-mdisable fp elim-masm verbose-munwind tables-target cpu penryn-dwarf column info-debugger tuning=lldb-ggnu pubnames-target linker version 512.4-v-resource dir/usr/local/ceral/llvm/9.0.0_1/lib/clang/9.0.0-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk-internal isystem/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk-internal isystem/usr/local/ceral/llvm/9.0.0_1/lib/clang/9.0.0/include-内部外部isystem/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include-fdebug编译目录/Users/BN/Documents/Library/CS/Compilers/llvm/llvm传递骨架-ferror限制19-fmessage长度80-堆栈保护器1-fblock-fencode扩展块签名-F使用atexit注册全局DTR-fobjc runtime=macosx-10.14.0-fmax type align=16-FDDiagnostics show option-fcolor diagnostics-load build/skeleton/libSkeletonPass.so-o/var/folders/cf/1_hzh5h91x90j4xx_h1mlb4w0000gp/T/example-4b27ba.o-xc example.c
clang-cc1 9.0.0版基于LLVM 9.0.0默认目标x86_64-apple-darwin18.7.0
忽略不存在的目录“/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include”
忽略不存在的目录“/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks”
#包括“…”搜索从这里开始:
#包括搜索从这里开始:
/usr/local/ceral/llvm/9.0.0_1/lib/clang/9.0.0/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks(框架目录)
搜索列表结束。
堆栈转储:
0程序参数:/usr/local/ceral/llvm/9.0.0_1/bin/clang-9-cc1-triple x86_64-apple-macosx10.14.0-Wdeprecated objc isa usage-Werror=不推荐的objc isa usage-emit obj-mrelax all-disable free-disable llvm verifier-discard value names-main文件名示例.c-mrelocation model pic-pic-pic level 2-mthread model posix-sable fp-elim-masm verbose-munwind tables-target cpu penryn-dwarf column info-debugger tuning=lldb-ggnu pubnames-target linker version 512.4-v-resource dir/usr/local/cell/llvm/9.0.0_1/lib/clang/9.0.0-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk-internal isystem/Library/Developer/CommandLineTools/sdk/sdk/MacOSX.sdk/local/include-内部isystem/usr/local/ceral/llvm/9.0.0_1/lib/clang/9.0.0/include-内部isystem/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include-fdebug编译目录/Users/BN/Documents/Library/CS/Compilers/llvm-pass骨架-ferror limit 19-fmessage length 80-stack protector 1-fblock-fencode扩展块签名-使用atexit注册全局DTOR-fobjc runtime=macosx-10.14.0-fmax type align=16-fdiagnostics show option-fcolor diagnostics-load build/skeleton/libSkeletonPass.so-o/var/folders/cf/1_hzh5h91x90j4xx_h1mlb4w0000gp/T/example-4b27ba.o-x c example.c
0 clang-9 0x00000001071fba46 llvm::sys::PrintStackTrace(llvm::raw_ostream&)+40
1个clang-9 0x00000001071fbe98信号处理器(内部)+180
2 libsystem_platform.dylib 0x00007fff6f2aeb5d_sigtramp+29
3 libsystem_platform.dylib 0x0000000000000001_sigtramp+18446603338651079873
4 clang-9 0x0000000106e94485 llvm::object_deleter::call(void*)+19
5 clang-9 0x00000001071abc95 llvm::llvm_shutdown()+53
6 clang-9 0x0000000107193061 llvm::InitLLVM::~InitLLVM()+15
7-9 0x0000000106034857干管+7249
8 libdyld.dylib 0x00007fff6f0c33d5启动+1
clang-9:错误:无法执行命令:分段错误:11
clang-9:错误:clang前端命令由于信号而失败(使用-v查看调用)
clang版本9.0.0(标签/发布号900/最终版)
目标:x86_64-apple-darwin18.7.0
线程模型:posix
InstalledDir:/usr/local/cillar/llvm/9.0.0_1/bin
clang-9:注意:诊断信息:请将错误报告提交给https://bugs.llvm.org/ 并包括崩溃回溯、预处理的源代码和相关的运行脚本。
clang-9:错误:无法执行命令:分段错误:11
clang-9:注意:诊断消息:生成预处理源时出错。
错误消息指出将忽略两个不存在的目录
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks
。这些目录实际上分别安装在
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library
下。不确定这是否相关,以及如何告诉Clang查看这些位置


有人能帮我吗?

恐怕我帮不了你,但我可以提供一个小建议:自己构建LLVM,并通过调试来构建它。这有99%的可能会在segfault之前/而不是之前给你带来一条有用的信息。我也无能为力,但我会怀疑orig
clang version 9.0.0 (tags/RELEASE_900/final)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /usr/local/Cellar/llvm/9.0.0_1/bin
 "/usr/local/Cellar/llvm/9.0.0_1/bin/clang-9" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name example.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include -internal-isystem /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -fdebug-compilation-dir /Users/BN/Documents/Library/CS/Compilers/LLVM/llvm-pass-skeleton -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -load build/skeleton/libSkeletonPass.so -o /var/folders/cf/1_hzh5h91x90j4xx_h1mlb4w0000gp/T/example-4b27ba.o -x c example.c
clang -cc1 version 9.0.0 based upon LLVM 9.0.0 default target x86_64-apple-darwin18.7.0
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
Stack dump:
0.  Program arguments: /usr/local/Cellar/llvm/9.0.0_1/bin/clang-9 -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name example.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include -internal-isystem /usr/local/Cellar/llvm/9.0.0_1/lib/clang/9.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -fdebug-compilation-dir /Users/BN/Documents/Library/CS/Compilers/LLVM/llvm-pass-skeleton -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -load build/skeleton/libSkeletonPass.so -o /var/folders/cf/1_hzh5h91x90j4xx_h1mlb4w0000gp/T/example-4b27ba.o -x c example.c 
0  clang-9                  0x00000001071fba46 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1  clang-9                  0x00000001071fbe98 SignalHandler(int) + 180
2  libsystem_platform.dylib 0x00007fff6f2aeb5d _sigtramp + 29
3  libsystem_platform.dylib 0x0000000000000001 _sigtramp + 18446603338651079873
4  clang-9                  0x0000000106e94485 llvm::object_deleter<llvm::SmallVector<std::__1::pair<llvm::PassManagerBuilder::ExtensionPointTy, std::__1::function<void (llvm::PassManagerBuilder const&, llvm::legacy::PassManagerBase&)> >, 8u> >::call(void*) + 19
5  clang-9                  0x00000001071abc95 llvm::llvm_shutdown() + 53
6  clang-9                  0x0000000107193061 llvm::InitLLVM::~InitLLVM() + 15
7  clang-9                  0x0000000106034857 main + 7249
8  libdyld.dylib            0x00007fff6f0c33d5 start + 1
clang-9: error: unable to execute command: Segmentation fault: 11
clang-9: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 9.0.0 (tags/RELEASE_900/final)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /usr/local/Cellar/llvm/9.0.0_1/bin
clang-9: note: diagnostic msg: PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
clang-9: error: unable to execute command: Segmentation fault: 11
clang-9: note: diagnostic msg: Error generating preprocessed source(s).