请不要评论我应该如何通过引用等等.这段代码完全是实验性的.专注于非确定性行为.
我知道,这个标题听起来很持怀疑态度.
这是正在发生的事情:
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) 我正在尝试使用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) 我正在尝试使用 LLVM C API 为动态语言构建 JIT 编译器,但我坚持实现动态类型,例如在函数定义中,LLVM 需要每个参数的类型,但类型在运行时之前是未知的,基于什么用户通行证,我用谷歌搜索了一段时间,但没有任何关于它的好资源,我也尝试查看 Julia 的源代码,看看他们是如何做到的,不幸的是代码又大又复杂,我不得不到处寻找这样的一个小细节,从我目前看到的情况来看,它们将它们的类型表示为一个空的 LLVM 结构指针和一个保存一些额外数据的 func sig 类型,但我非常不确定它是如何工作的,或者即使我是解释正确,任何资源都可能有帮助,最感谢示例代码,示例不必使用 C API,C++ 也很好,我会以一种或另一种方式自己转换它。
提前致谢。
你们都可能遇到过如下情况:
-(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) 我最近开始使用 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)
无论返回值如何,该代码都不应崩溃。
llvm ×5
c++ ×4
clang ×2
c ×1
freebsd ×1
if-statement ×1
ios ×1
jit ×1
llvm-clang ×1
nsdictionary ×1
objective-c ×1
xcode ×1