clang

clang で Uniform initialization

ありゃ、clang でも Uniform initialization 使えたんですね。 知らなかった…。 [ソース] #include <string> #include <cassert> struct X{ int n; std::string str; }; X func(){ return {0, "homu"}; } int main(){ X x{0, "homu"}; auto x2 = func(); assert(x.n == 0); as</cassert></string>…

clang 3.0 でエラーメッセージがパワーアップ

clang 2.9 でも『もしかして:〜』という機能があったんですが、clang 3.0 になって更にパワーアップしたらしいです。 [エラーコード] typedef int Integer; int main(){ integer* i = 0; // Integer return 0; } [clang 2.9] main.cpp:6:1: error: use of u…

LLVM 3.0 がリリース

スケジュールより遅れましたが、無事に LLVM 3.0 がリリースされました。 ダウンロードはこちらから。 clang 3.0 で追加される C++11 の機能なんかはここやここら辺を参照して下さい。

llvm 3.0 のリリースが11月30日に延期

Upcoming Releases : November 30th ― Release! 本日リリース予定だった llvm 3.0 ですが、リリースが30日に延期していました(´・ω・`)

clang 3.0 で追加される C++11 の機能

いつの間にか C++ and C++'11 Support in Clang のページレイアウトが変更されていました。 バージョンごとの実装が見やすくなっている…! clang 3.0 で追加される C++11 の機能は以下のとおり。 Non-static data member initializers Alias templates Null …

LLVM 3.0 は、11月16日リリース予定

いつの間にか公式サイトのリリーススケジュールが更新されていました。 リリースまでの流れは以下のとおり。 10月14日 - Create 3.0 branch 10月16日 - First round of testing starts 10月23日 - First round of testing ends / Bug fixing begins 10月30日…

Visual Studio で libclang.dll のデバッグ環境 その2

前回の続きです。 前回は、すでに libclang.dll をロードしているプロセスに対してアタッチしましたが、次は Visual Studio 上からプロセスを起動してデバッグしてみたいと思います。 今回は、Visual Studio から Python を起動して、libclang の Pythonモジ…

Visual Stduio で libclang.dll のデバッグ環境

今後の事を考えるとあった方が便利かなー、と思い用意しました。 libclang.dll というか、dll のデバッグ環境ですね。 Visual Studio 上で libclang.dll のステップ実行とかを行います。 ※以下 llvm のビルドが出来ること前提です。 [必要なもの] Visual Stu…

clang のコマンドラインオプションを渡す

Index.parse の引数にコマンドラインオプションを配列で渡すことが出来ます。 [main.py] import sys import clang.cindex target = "main.cpp" command = ["-ID:/boost/boost_1_47_0", "-Wall", "-std=C++0x"] index = clang.cindex.Index.create() tree = i…

Python のソース内に記述した C++ のソースを渡す

Index.parse に C++ のソースを文字列として渡すことが出来ます。 [main.py] import sys import clang.cindex source = """\ #include <string> int main(){ } """ index = clang.cindex.index.create() tree = index.parse("input.cpp", unsaved_files = [ ("input.</string>…

clang を使用してインクルードファイルの出力

そんなわけで、clang の libclang と cindex.py を使用した簡単な C++ のコード解析です。 とりあえず、インクルードしているヘッダーファイルの出力とか。 [Python ソース] import sys import clang.cindex target = "main.cpp" index = clang.cindex.Index…

clang のちょっと賢いエラーメッセージ

clang のエラーメッセージで面白いものがあったので、載せておきます。 [ソース] template<tyepname T> // typo struct hoge{}; int main(){ doubelw d = 0.0; // typo return 0; } これは double と typename を typo してしまってコンパイルエラーになる例なんですが c</tyepname>…

neocomplcache-clang

結構前なんですが、neocomplcache に clang_complete が取り込まれた『neocomplcache-clang』が作られたので、その紹介です。 neocomplcache-clang では、clang_complete と neocomplcache が競合してしまう問題が解消されており、neocomplcache 上で、clang…

C++ and C++'0x Support in Clang

が更新されたらしいので、『template aliases』と『In-declaration member initialization』を試してみました。 C++ and C++'0x Support in Clang 他にも更新されたのがあるかも。 [ソース] #include <iostream> #include <boost/array.hpp> template<typename T, typename U> struct is_same{ static bool const</typename></boost/array.hpp></iostream>…

clang_complete に非同期処理が追加されたっぽい

なんかスレッド回りの処理が追加されたっぽいです。 実装自体は、libclang.py で行っている、libclang を使ってないと反映されないかも。 実際にどこら辺が非同期になっているのかわかりませんが、コード補完自体はそれっぽくなっている感じ? 全体的に重く…

clang_complete にデフォルトで、&path をインクルードディレクトリに追加する機能が追加

されました。 デフォルトで、&path の中身が -I オプションに追加されるので、g:clang_auto_user_options に直接インクルードディレクトリを記述する必要がなくなりました。 インクルードディレクトリを追加する場合は、path に追加してください。 使用する…

clang_complete 〜高速化への道〜

さて、以前、vim でコード解析を行うプラグインとして、clang_complete を紹介しました。 補完の精度は優秀ですが、普通に使用すると補完に時間がかかってしまい、ストレスが溜まってしまいます。 clang_complete では、高速にコード解析を行う方法がいくつ…

Windows で clang のビルドを行う

元サイトはここです。 http://lyuts.net/blog/2010/06/llvm-clang-mingw llvm + clang + MinGW でビルドを行います。 ☆環境 WindowsXP gcc 4.5.0(MinGW) cmake 2.8.3 clang 2.9 ☆ビルド MinGW をインストールします。 http://sourceforge.net/projects/min…

clang_complete

さて、前回も書きましたが OmniCppComplete (ctags)では補完されるコードに限界があります。 例えば、次のようなコードはうまく補完が行えません。 #include <boost/mpl/vector.hpp> namespace mpl = boost::mpl; mpl:: // ←ここでうまく補完されない。 そこで、clang_complete と</boost/mpl/vector.hpp>…