+++ /dev/null
--include ../tools.mk
-
-ifeq ($(UNAME),Darwin)
-PLUGIN_FLAGS := -C link-args=-Wl,-undefined,dynamic_lookup
-endif
-
-ifeq ($(findstring stage1,$(RUST_BUILD_STAGE)),stage1)
-# ignore stage1
-all:
-
-else
-# Windows doesn't correctly handle include statements with escaping paths,
-# so this test will not get run on Windows.
-ifdef IS_WINDOWS
-all:
-else
-all: $(call NATIVE_STATICLIB,llvm-function-pass) $(call NATIVE_STATICLIB,llvm-module-pass)
- $(RUSTC) plugin.rs -C prefer-dynamic $(PLUGIN_FLAGS)
- $(RUSTC) main.rs
-
-$(TMPDIR)/libllvm-function-pass.o:
- $(CXX) $(CFLAGS) $(LLVM_CXXFLAGS) -c llvm-function-pass.so.cc -o $(TMPDIR)/libllvm-function-pass.o
-
-$(TMPDIR)/libllvm-module-pass.o:
- $(CXX) $(CFLAGS) $(LLVM_CXXFLAGS) -c llvm-module-pass.so.cc -o $(TMPDIR)/libllvm-module-pass.o
-endif
-
-endif
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "llvm/Pass.h"
-#include "llvm/IR/Function.h"
-
-using namespace llvm;
-
-namespace {
-
- class TestLLVMPass : public FunctionPass {
-
- public:
-
- static char ID;
- TestLLVMPass() : FunctionPass(ID) { }
-
- bool runOnFunction(Function &F) override;
-
- StringRef getPassName() const override {
- return "Some LLVM pass";
- }
-
- };
-
-}
-
-bool TestLLVMPass::runOnFunction(Function &F) {
- // A couple examples of operations that previously caused segmentation faults
- // https://github.com/rust-lang/rust/issues/31067
-
- for (auto N = F.begin(); N != F.end(); ++N) {
- /* code */
- }
-
- LLVMContext &C = F.getContext();
- IntegerType *Int8Ty = IntegerType::getInt8Ty(C);
- PointerType::get(Int8Ty, 0);
- return true;
-}
-
-char TestLLVMPass::ID = 0;
-
-static RegisterPass<TestLLVMPass> RegisterAFLPass(
- "some-llvm-function-pass", "Some LLVM pass");
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "llvm/IR/Module.h"
-
-using namespace llvm;
-
-namespace {
-
- class TestLLVMPass : public ModulePass {
-
- public:
-
- static char ID;
- TestLLVMPass() : ModulePass(ID) { }
-
- bool runOnModule(Module &M) override;
-
- StringRef getPassName() const override {
- return "Some LLVM pass";
- }
-
- };
-
-}
-
-bool TestLLVMPass::runOnModule(Module &M) {
- // A couple examples of operations that previously caused segmentation faults
- // https://github.com/rust-lang/rust/issues/31067
-
- for (auto F = M.begin(); F != M.end(); ++F) {
- /* code */
- }
-
- LLVMContext &C = M.getContext();
- IntegerType *Int8Ty = IntegerType::getInt8Ty(C);
- PointerType::get(Int8Ty, 0);
- return true;
-}
-
-char TestLLVMPass::ID = 0;
-
-static RegisterPass<TestLLVMPass> RegisterAFLPass(
- "some-llvm-module-pass", "Some LLVM pass");
+++ /dev/null
-#![feature(plugin)]
-#![plugin(some_plugin)]
-
-fn main() {}
+++ /dev/null
-#![feature(plugin_registrar, rustc_private)]
-#![crate_type = "dylib"]
-#![crate_name = "some_plugin"]
-
-extern crate rustc;
-extern crate rustc_plugin;
-
-#[link(name = "llvm-function-pass", kind = "static")]
-#[link(name = "llvm-module-pass", kind = "static")]
-extern {}
-
-use rustc_plugin::registry::Registry;
-
-#[plugin_registrar]
-pub fn plugin_registrar(reg: &mut Registry) {
- reg.register_llvm_pass("some-llvm-function-pass");
- reg.register_llvm_pass("some-llvm-module-pass");
-}