相关疑难解决方法(0)

Clang - 将C头编译为LLVM IR/bitcode

假设我有以下简单的C头文件:

// foo1.h
typedef int foo;

typedef struct {
  foo a;
  char const* b;
} bar;

bar baz(foo*, bar*, ...);
Run Code Online (Sandbox Code Playgroud)

我的目标是获取此文件,并生成一个如下所示的LLVM模块:

%struct.bar = type { i32, i8* }
declare { i32, i8* } @baz(i32*, %struct.bar*, ...)
Run Code Online (Sandbox Code Playgroud)

换句话说,将.h带有声明的C 文件转换为等效的LLVM IR,包括类型分辨率,宏扩展等.

通过Clang传递它来生成LLVM IR会产生一个空模块(因为实际上没有使用任何定义):

$ clang -cc1 -S -emit-llvm foo1.h -o - 
; ModuleID = 'foo1.h'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin13.3.0"

!llvm.ident = !{!0}

!0 = metadata !{metadata !"clang version 3.5 (trunk 200156) (llvm/trunk 200155)"}
Run Code Online (Sandbox Code Playgroud)

我的第一直觉是转向谷歌,我遇到了两个相关的问题:一个来自邮件列表 …

c c++ llvm clang llvm-ir

22
推荐指数
1
解决办法
2645
查看次数

标签 统计

c ×1

c++ ×1

clang ×1

llvm ×1

llvm-ir ×1