タグ

clangに関するcrafのブックマーク (17)

  • LLVMのstd::uniform_real_distributionが遅い件のLLVM観点の原因を探ってみた - Qiita

    はじめに 興味があったので以下の件についてLLVMの観点で原因を探ってみました。 以下、デバッグビルドしたLLVM15.0.7を使ってみていきます。 "std::uniform_real_distributionが遅い件"で問題とされた部分 const long double __r = static_cast<long double>(__urng.max()) - static_cast<long double>(__urng.min()) + 1.0L; const size_t __log2r = std::log(__r) / std::log(2.0L); このままでは、コンパイル出来ないので整形します。上記コード中の__urng.max()と__urng.min()は、たどるとそれぞれstd::numeric_limitsのmax()とmin()となっているので、そのように置

    LLVMのstd::uniform_real_distributionが遅い件のLLVM観点の原因を探ってみた - Qiita
  • C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium

    発端はuchan_nos氏によるこのツイートでした。 C言語で、当にメモリの0番地にデータを書きたいときはどうすりゃええの?— うー@技術書典8 Day1う31 BitNOS (@uchan_nos) 2020年2月12日 それに対する私のリプライ: uint8_t *p = 1; p--; *p = v;— hikalium (@hikalium) 2020年2月12日 私はこれで話が終わると思っていたのだが、どうやらそうではなかったらしく、色々な視点からの意見が加わりながら、話は混沌を極めたのでした…。 ということで、ここに私のこのツイートに対しての見解とか、わかったことをまとめておこうと思います。 私のリプライの背景について uchanさんが求める「0番地にデータを書きたい」という課題設定を、私はこのように解釈しました。 C言語において、整数0をポインタに変換すると、それはNULL

    C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium
    craf
    craf 2020/02/16
  • 大学院生のためのLLVM | POSTD

    (注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな

  • Clang is now used to build Chrome for Windows

    PerformanceWe conducted extensive A/B testing of performance. Performance telemetry numbers are about the same for MSVC-built and clang-built Chrome – some metrics get better, some get worse, but all of them are within 5% of each other. The official MSVC builds used LTCG and PGO, while the Clang builds currently use neither of these. This is potential for improvement that we look forward to explor

  • C++の未定義の挙動で呼ばれないはずの関数が呼ばれる場合

    Krister Walfridsson’s blog: Why undefined behavior may call a never-called function 以下のようなコードをClangでコンパイルすると、 #include <cstdlib> typedef int (*Function)(); static Function Do; static int EraseAll() { return system("rm -rf /"); } void NeverCalled() { Do = EraseAll; } int main() { return Do(); } Clangは以下のような最適化されたコードを吐く。 main: movl $.L.str, %edi jmp system .L.str: .asciz "rm -rf /" これは以下のようなコードと同じだ。

    craf
    craf 2017/09/26
  • サニタイザーによる Android のバグ退治

    .app 1 .dev 1 #11WeeksOfAndroid 13 #11WeeksOfAndroid Android TV 1 #Android11 3 #DevFest16 1 #DevFest17 1 #DevFest18 1 #DevFest19 1 #DevFest20 1 #DevFest21 1 #DevFest22 1 #DevFest23 1 #hack4jp 3 11 weeks of Android 2 A MESSAGE FROM OUR CEO 1 A/B Testing 1 A4A 4 Accelerator 6 Accessibility 1 accuracy 1 Actions on Google 16 Activation Atlas 1 address validation API 1 Addy Osmani 1 ADK 2 AdMob 32 Ads

    サニタイザーによる Android のバグ退治
  • LLVMがWindowsのデバッグ情報フォーマットのPDBをサポート

    LLVM Project Blog: LLVM on Windows now supports PDB Debug Info この数年、clangをWindowsでソフトウェア開発するための世界級のツールチェインにするために尽力してきた。このことについては、すでに何度も書いてきたことだ。LLVMは完全なABI互換を実現した(ただしバグ互換ではない)。互換性を実現するのが難しい分野にデバッグ情報があるが、この2年間で、LLVMは飛躍的な発展をとげた。とりあえず結論を先に書くとこうだ。WindowsでClangを使うと、PDBデバッグ情報が出せる。 背景:CodeView VS PDB CodeViewは1980年台の中頃にMicrosoftによって考案されたデバッグ情報フォーマットだ。様々な理由で、他のデバッガーはDWARFという独立したフォーマットを開発し、これは標準化されて、多くのコンパ

  • Android Bug Swatting with Sanitizers

    Posted by Dan Austin, Android Security team LLVM, the compiler infrastructure used to build Android, contains multiple components that perform static and dynamic analysis. One set of these components that have been used extensively when analyzing Android are the sanitizers, specifically AddressSanitizer, UndefinedBehaviorSanitizer and SanitizerCoverage. These sanitizers are compiler-based instrume

    Android Bug Swatting with Sanitizers
  • Visual Studio 2017でclangをコンソールで利用する - L'eclat des jours(2017-04-16)

    _ Visual Studio 2017でclangをコンソールで利用する VS2015のときは、c2.dll問題とかあってもなんとなくクリアできていたのだが(clangはx86用だということさえわかれば、あとは適切なほうのclang.exeのPATHを設定する)、VS2017では常に失敗するようになった。 -vを付けてやり直せと出てきたので、やってみると、link.exeの起動に失敗している。 おや? と思ってVS2015のclangで見てみると、こちらはlink.exeをフルパスで起動している。ふつうに考えてみれば、MSがclangをコマンドラインで利用できないように一工夫したようだ。気か? で、解決策として、clang.exeと同じディレクトリにlink.exeを入れるとか考えてみたが、ばかげている。 であれば、しょうがない。 MSBuildの出番である。 とはいえ、なんかいろいろ

  • L&#39;eclat des jours(2016-09-19)

    _ Visual StudioでclangでC11を試す(が) C11のAppendix Kを試してみたくて、bash on Windowsのclangで次のコードをコンパイルした。 #define __STDC_WANT_LIB_EXT1__ 1 #include <stdio.h> int main() { char tmp[80]; int n = scanf_s("%s", tmp); // => コンパイルエラーとなる if (n > 0) { puts(tmp); } } するとscanf_sは未定義だと警告され、結局はリンクエラーとなる。 test.c:(.text+0x1e): `scanf_s' に対する定義されていない参照です /usr/include/studio.hを見たら、確かに定義が存在しない。 まあAppendix Kはオプションだからそんなものかも知れない。

    L&#39;eclat des jours(2016-09-19)
  • とても賢いコンパイラーの逆襲

    The Hacks of Life: The Dangers of Super Smart Compilers Clangの最適化が未定義の挙動を検出してコード片を消し去ってしまったことに引っかかった開発者の嘆き。 今日初めて、RenderFarmのDSF render(global scenaryを作成するのに使っている内部ツール)をClangで最適化コンパイルして実行した。 結果はsegfaultだった。これは驚きだ(そして自身消失だ)。というのも、最適化していないデバッグビルドは問題なく動くし、GCCでコンパイルされた最適化ビルドも正しく動く。-O0ではバグがない(つまり#if DEVコードのバグではない)ので、「最適化は何をやっているんだ」の時間だ。 大量のprintfと試行錯誤の結果、最適化は以下のようなコード片を丸ごとすっ飛ばしていることが判明した。 for(vector<me

  • clang の AddressSanitizer を使って、バッファオーバーフロー/ヒープオーバーフローを検出する - Qiita

    clang の AddressSanitizer を使って、バッファオーバーフロー/ヒープオーバーフローを検出するCC++clang 最近の clang では AddressSanitizer という機能があり、コンパイルフラグに -g -fsanitize=address -fno-omit-frame-pointer を追加することで実行時にバッファオーバーフロー/ヒープオーバーフローが検出できる。Xcode だと 7.0 以降で使えるようだ。 #include <stdio.h> int main() { char buffer[5]; for (int i = 0; i <= 5; i++) { buffer[i] = i; } printf("OK\n"); } $ clang foo.c -g -fsanitize=address -fno-omit-frame-pointer

    clang の AddressSanitizer を使って、バッファオーバーフロー/ヒープオーバーフローを検出する - Qiita
    craf
    craf 2015/11/10
  • Bringing Clang to Windows - Visual C++ Team Blog

    As you may know, Visual Studio now supports building Android and iOS applications using Clang. We realize the need of our users to write cross-platform apps and we know that C++ offers massive benefits in the cross-platform arena. Clang has made impressive strides in standards conformance and diagnostics and is fast becoming the preferred C++ compiler for non-Windows platforms. In order to extend

    Bringing Clang to Windows - Visual C++ Team Blog
  • Shows

    AI is suddenly everywhere. Do you need to go and get a shiny machine learning degree to remain competitive? John Maeda says not to worry. He’ll show you how to cook delicious dishes into your coding repertoire with his new show - Mr. Maeda’s Cozy AI Kitchen. Find out how you can use GitHub Copilot, an add-on that is powered by AI, to get helpful suggestions when writing code or documentation. This

    Shows
    craf
    craf 2014/11/15
    Android/iOS用にclang対応か
  • External Clang Examples — Clang 19.0.0git documentation

    External Clang Examples¶ Introduction¶ This page provides some examples of the kinds of things that people have done with Clang that might serve as useful guides (or starting points) from which to develop your own tools. They may be helpful even for something as banal (but necessary) as how to set up your build to integrate Clang. Clang’s library-based design is deliberately aimed at facilitating

    craf
    craf 2013/04/26
  • Clang のコード補完 - Backnumbers: Steps to Phantasien

    Clang のツリーを眺めていたら, "clang-completion-mode.el" というファイルがあった. clang のプログラムを呼び出してコード補完ができるらしい. (使いかたを説明してくれている人もいた.) 以前読んだ時 は気付かなかったけど, 二年前からあったようだ. こんなものがプラグインで書けてしまうなんてさすがモダンなコンパイラは違うなーインデクスはどうするのかなーと 感心しつつコードを見ていたらインデクスのような前処理はないようす. それに全然プラグインじゃない. Clang 組み込みの機能として実装されていた. 以前から Xcode(4) がどんな風に Clang を統合するのか気になっていた. コード補完はそうした取り組みの一環かもしれない. 高々 Emacs のため Clang 組込みの機能を増やすとも思えないからね. というわけでざっとコードを眺めてみよ

    craf
    craf 2011/04/28
  • clangでソフトウェアをビルドしC++を知る - 射撃しつつ前転 改

    clangというのはllvm向けのC/C++/Obj-Cのためのフロントエンドで、最近はGoogle ChromeとかFirefoxもコンパイルできるレベルにまで成熟してきているらしい。 いくつかのブログで紹介されているのを見ても、ふーん、ぐらいにしか思っていなかったのだが、あんな大規模なソフトウェアがコンパイルできるというのは、考えてみるとすごいことである。大事なことなので強調しておくが、すごいことである。十分に実用的なレベルに到達していることだ。ビルドも早いし生成されたコードもg++と同程度には速いというし、試してみる必要がある。 という訳で、いくつか実際にソフトウェアをビルドしてみた。試してみた限りでは、 libstdc++のtr1/unordered_mapがビルドできない C++のコーナーケースで、clangが許容しないものが多い といった問題があったが、割とどれもすんなりとコン

    clangでソフトウェアをビルドしC++を知る - 射撃しつつ前転 改
  • 1