草庐IT

llvm-libc

全部标签

c++ - libc++ 和 libstdc++ 之间的 istream eof 差异

以下(玩具)程序在链接到libstdc++和libc++时返回不同的东西。这是libc++中的错误还是我不明白istreameof()是如何工作的?我已经尝试在linux和macosx上使用g++运行它,在macosx上使用clang,有和没有-std=c++0x。我的印象是eof()在尝试读取(通过get()或其他方式)实际失败之前不会返回true。这是libstdc++的行为方式,而不是libc++的行为方式。#include#includeintmain(){std::stringstreams;s 最佳答案 编辑:这是由于旧

c++ - 使用 Clang 构建 V8 并发出 LLVM IR

我正在尝试使用Clang构建V8Javascript引擎并输出.ll文件。我正在尝试合并信息here和here去做这个。但是,当我尝试make时,它失败了,显示“Noruletomaketarget”。我搞不清楚了。我试过只编译v8.cc,但完全失败了。我想这是因为我试图通过将它作为编译器放入来强制-emit-llvm,但我不确定。$cdv8$exportCXX="clang++-S-emit-llvm"$exportCC="clang-S-emit-llvm"$exportCPP="clang-E-S-emit-llvm"$exportLINK="clang++-S-emit-llv

c++ - 如何检查指令是否为 LLVM IR 中的 PHI 指令

我正在编写一个LLVMpass。对于一条指令(llvm::InstructionClass),如何判断一条指令是否为PHI指令? 最佳答案 我找到了解决方案。您可以像这样检查PHI节点,isa(inst). 关于c++-如何检查指令是否为LLVMIR中的PHI指令,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9470505/

c++ - 捕获 libc 错误消息,从/dev/tty 重定向

这个问题在这里已经有了答案:HowtoredirectRUNTIMEERRORStoSTDERR?(2个答案)关闭2年前。我正在trycatchlibc在检测到错误条件时生成的错误消息。比如我的测试代码:#includeintmain(){char*p=(char*)malloc(10);free(p);free(p);}生成此输出$./main***Errorin`./main':doublefreeorcorruption(fasttop):0x000000000124b010***=======Backtrace:=========/lib64/libc.so.6(+0x7d1f

c++ - LLVM 转换指令

我有ConstantInt和ConstantFP值,我想使用fadd添加它们。但是,我无法将ConstantInt转换为fadd可接受的float。代码摘录如下:Value*left=ConstantInt::get(Type::getInt64Ty(getGlobalContext()),12,true);Value*right=ConstantFP::get(Type::getFloatTy(getGlobalContext()),11.6);Instruction*cast=CastInst::Create(Instruction::SIToFP,left,left->getTy

c++ - 了解内存分配的工作原理 (LLVM)

我正在玩具编译器(第一次)上取得进展,并试图了解如何分配/构造LLVM结构类型。Kaleidoscope教程没有包括甚至没有提到这一点,我不知道我在LLVM源/测试中寻找什么来找到可能的例子。所以我写了一个简单的C++示例,用clang转储了IR,试图理解它产生了什么,但老实说,我并没有完全遵循它。对我来说显而易见的是函数定义/声明和一些函数调用以及memset调用,所以我得到了它的一部分,但它还没有全部组合在一起。(P.S我对alloca指令文档的解释是它创建的任何东西在返回时都会被释放所以我不能使用那个权利,它基本上只用于局部变量?)我所做的是:alloc.cppstructAll

c++ - 包括带有 Clang/LLVM 的 C++ 11 头文件

我已经从源代码安装了clang和llvm,并且正在尝试使用新标准的特性编译一些C++代码。我发现,例如使用forranges例如for(i:vector)工作正常,当我需要导入标题时遇到问题(找不到头文件),例如或.我是否需要使用新的libc++才能使用这些header,或者我是否需要进行简单的构建更改?目前,我刚刚将clang和llvm构建到我的主目录中的一个文件夹中,并从那里调用clang++。 最佳答案 参见http://clang.llvm.org/get_started.html.IfyouintendtoworkonCl

c++ - 为什么libc++的map实现要用这个union?

#if__cplusplus>=201103Ltemplateunion__value_type{typedef_Keykey_type;typedef_Tpmapped_type;typedefpairvalue_type;typedefpair__nc_value_type;value_type__cc;__nc_value_type__nc;template_LIBCPP_INLINE_VISIBILITY__value_type(_Args&&...__args):__cc(std::forward(__args)...){}_LIBCPP_INLINE_VISIBILITY_

c++ - 在 LLVM 中获取 BasicBlock 的前身

获取BasicBlock的前辈的最简单方法是什么?在LLVM框架中?我看过DepthFirstIterator和idf_iterator,但实际上我需要对控制流图进行广度优先搜索。我觉得这应该很容易,但从我一直在网上探索的文档或示例来看,这并不明显。 最佳答案 文档中并不清楚,但是basicblockclass支持pred迭代器,它将前身提供给基本block。在C++11风格中,可以按如下方式循环遍历block的前导:BasicBlock*B=...for(autoit=pred_begin(B),et=pred_end(B);it

c++ - std::condition_variable_any 的 libc++ 实现

条件变量应该有关于notify()的单一顺序和unlock_sleep()(在wait()中使用的一个虚构的函数调用,其中互斥锁被解锁并且线程作为一个原子操作序列休眠)操作。使用任意可锁定器实现此目的std::condition_variable_any实现通常在内部使用另一个互斥体(以确保原子性和休眠)如果内部unlock_sleep()和notify()(notify_one()或notify_all())操作彼此之间不是原子的,您冒着一个线程解锁互斥锁、另一个线程发出信号然后原始线程进入休眠状态并且永远不会醒来的风险。我正在阅读std::condition_variable_an