ClangVSxをインストールしてみた(その2)
前回の日記
id:ohtorii:20110626:1309071234
前回、ClangVSx を Visual Studio 2010 へインストールしたときは気がつきませんでしたが、ソースコードを右クリックしたメニューにclangの項目が追加されてました。
早速試してみました。
環境
- Windows7 64bit
- Visual Studio 2010
- clang 2.9
- LLVM 2.9
- ishani-ClangVSx-f98e139.tar.gz
試したソースコード
#define _0 1 #define _1 2 #define _2 3 #define JOIN(X,Y) X##Y #define INC(X) JOIN(_,X) class hoge{ public: int add(int x, int y){ return x + y; } }; int _tmain(int argc, char* argv[]){ hoge h; int a=h.add(INC(0), INC(INC(0))); return a; }
Compile
省略
Run Static Analyze
省略
View Disassembly(LLVM)
; ModuleID = 'hallo_clang.ii' target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32" target triple = "i686-pc-win32" %class.hoge = type { i8 } define i32 @_Z6_tmainiPPc(i32 %argc, i8** %argv) { %1 = alloca i32, align 4 %2 = alloca i8**, align 4 %h = alloca %class.hoge, align 1 %a = alloca i32, align 4 store i32 %argc, i32* %1, align 4 store i8** %argv, i8*** %2, align 4 %3 = call i32 @_ZN4hoge3addEii(%class.hoge* %h, i32 1, i32 2) store i32 %3, i32* %a, align 4 %4 = load i32* %a, align 4 ret i32 %4 } define linkonce_odr i32 @_ZN4hoge3addEii(%class.hoge* %this, i32 %x, i32 %y) nounwind align 2 { %1 = alloca %class.hoge*, align 4 %2 = alloca i32, align 4 %3 = alloca i32, align 4 store %class.hoge* %this, %class.hoge** %1, align 4 store i32 %x, i32* %2, align 4 store i32 %y, i32* %3, align 4 %4 = load %class.hoge** %1 %5 = load i32* %2, align 4 %6 = load i32* %3, align 4 %7 = add nsw i32 %5, %6 ret i32 %7 }
View Preprocessor Result
#line 1 "C:\\Users\\hoge\\Documents\\github\\hallo_clang\\hallo_clang\\hallo_clang.cpp" #line 1 "C:\\Users\\hoge\\Documents\\github\\hallo_clang\\hallo_clang\\hallo_clang.cpp" #line 1 "<built-in>" #line 1 "<built-in>" #line 133 "<built-in>" #line 1 "<command line>" #line 1 "<built-in>" #line 1 "C:\\Users\\hoge\\Documents\\github\\hallo_clang\\hallo_clang\\hallo_clang.cpp" class hoge{ public: int add(int x, int y){ return x + y; } }; int _tmain(int argc, char* argv[]) { hoge h; int a=h.add(1, 2); <------ 展開されている return a; }