标签: llvm

LLVM/LLDB的不确定行为(XCode 5.1.1)

请不要评论我应该如何通过引用等等.这段代码完全是实验性的.专注于非确定性行为.

我知道,这个标题听起来很持怀疑态度.

这是正在发生的事情:

vector<int> find_permutation2(vector<int> v) {
    int k = (int)v.size() - 1;
    while(k >= 0 && v[k] >= v[k + 1])
        k--;
    if(k == -1) return vector<int>();

    int i;
    for(i = (int)v.size() - 1; i > k; i--) {
        if(v[i] > v[k])
            break;
    }

    vector<int> r(v);
    std::swap(r[k], r[i]);
    std::reverse(r.begin() + k + 1, r.end());
    return r;
}

int main() {
    vector<int> foo = {2,3,4,1,0};
    vector<int> bar = find_permutation2(foo);
    default_random_engine g;
    uniform_int_distribution<int> dist(5,10);
    for(int i = 0; i < 10000; …
Run Code Online (Sandbox Code Playgroud)

c++ xcode llvm

-2
推荐指数
1
解决办法
99
查看次数

clang + llvm为JIT编译函数提供了一个错误的函数指针

我正在尝试使用clang + llvm 3.6来编译几个C函数(每个函数最终都可以非常大).

不幸的是,LLVM提供的函数指针使程序成为SEGFAULT.

到目前为止,我有以下代码:

#include <iostream>

#include <clang/CodeGen/CodeGenAction.h>
#include <clang/Basic/DiagnosticOptions.h>
#include <clang/Basic/TargetInfo.h>
#include <clang/Basic/SourceManager.h>
#include <clang/Frontend/CompilerInstance.h>
#include <clang/Frontend/CompilerInvocation.h>
#include <clang/Frontend/FrontendDiagnostic.h>
#include <clang/Frontend/TextDiagnosticPrinter.h>
#include <clang/Frontend/Utils.h>
#include <clang/Parse/ParseAST.h>
#include <clang/Lex/Preprocessor.h>

#include <llvm/Analysis/Passes.h>
#include <llvm/ExecutionEngine/SectionMemoryManager.h>
#include <llvm/ExecutionEngine/MCJIT.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/IR/Verifier.h>
#include <llvm/IR/Module.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/Bitcode/ReaderWriter.h>
#include <llvm/Support/ManagedStatic.h>
#include <llvm/Support/MemoryBuffer.h>
#include <llvm/Support/TargetSelect.h>
#include <llvm/Support/raw_os_ostream.h>
#include <llvm/Linker/Linker.h>

int main(int argc, char *argv[]) {

    using namespace llvm;
    using namespace clang;

    static const char* clangArgv [] = {"program", "-x", "c", "string-input"}; …
Run Code Online (Sandbox Code Playgroud)

c++ jit llvm clang

-2
推荐指数
1
解决办法
724
查看次数

使用 LLVM IR 实现动态类型语言

我正在尝试使用 LLVM C API 为动态语言构建 JIT 编译器,但我坚持实现动态类型,例如在函数定义中,LLVM 需要每个参数的类型,但类型在运行时之前是未知的,基于什么用户通行证,我用谷歌搜索了一段时间,但没有任何关于它的好资源,我也尝试查看 Julia 的源代码,看看他们是如何做到的,不幸的是代码又大又复杂,我不得不到处寻找这样的一个小细节,从我目前看到的情况来看,它们将它们的类型表示为一个空的 LLVM 结构指针和一个保存一些额外数据的 func sig 类型,但我非常不确定它是如何工作的,或者即使我是解释正确,任何资源都可能有帮助,最感谢示例代码,示例不必使用 C API,C++ 也很好,我会以一种或另一种方式自己转换它。

提前致谢。

c c++ compiler-construction language-design llvm

-2
推荐指数
1
解决办法
741
查看次数

如果在ios中的陈述,避免太多的最佳实践

你们都可能遇到过如下情况:

-(int) fightMath(int one, int two) {

if(one == 0 && two == 0) { result = 0; }
else if(one == 0 && two == 1) { result = 0; }
else if(one == 0 && two == 2) { result = 1; }
else if(one == 0 && two == 3) { result = 2; }
else if(one == 1 && two == 0) { result = 0; }
else if(one == 1 && two == 1) { …
Run Code Online (Sandbox Code Playgroud)

if-statement objective-c nsdictionary llvm ios

-5
推荐指数
1
解决办法
789
查看次数

为什么我的 C++ 程序会在我忘记 return 语句时崩溃,而不仅仅是返回垃圾?

我最近开始使用 CLang 来编译嵌入式 C++ ARM 程序。

在此之前,我使用 GCC 和 C,几乎专门用于嵌入式工作。

我注意到当我有一个返回值的方法时,我忘记了 return 语句,程序核心转储。除了来自我的设备驱动程序之一的“msleep error -1”之外,没有打印任何错误。这是在 FreeBSD 上。

我希望忘记 return 语句只会导致函数返回垃圾,而不是核心转储。

编辑:我要返回一个布尔值,而不是指针或对象或任何复杂的东西。即使返回值无关紧要,程序也会崩溃。

到底是怎么回事?

例如:

bool MyClass::DummyFunc() {
  <do some stuff and forget the return value>     
}
Run Code Online (Sandbox Code Playgroud)

别处:

if(pMyObj->DummyFunc()) {
  print ("Hey, it's true!\n");
} else {
  print ("Darn, it's false!\n");
}
Run Code Online (Sandbox Code Playgroud)

无论返回值如何,该代码都不应崩溃。

c++ freebsd llvm clang llvm-clang

-6
推荐指数
1
解决办法
629
查看次数