とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

ClangVSxをインストールしてみた(その2)

前回の日記
id:ohtorii:20110626:1309071234


前回、ClangVSx を Visual Studio 2010 へインストールしたときは気がつきませんでしたが、ソースコードを右クリックしたメニューにclangの項目が追加されてました。
早速試してみました。



環境

試したソースコード

#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;
}