問題タブ [llvm-clang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1237 参照

compiler-errors - クラス メンバーとしての unique_ptr とムーブ セマンティクスが clang でのコンパイルに失敗する

これらのクラスをコンパイルするための clang (Apple LLVM バージョン 4.2 (clang-425.0.28)) を取得できません。

次のようにコンストラクターを実行したいと思います。

しかし、これを行うと、次のコンパイラ エラーが発生します: ../src/C++11-2.cpp:66:10: エラー: 'std::unique_ptr' C.m_ptr( ptrB);

実行することでコンパイラの問題を解決できますCl(std::move(ptrB))が、これは実際には A の所有権を ptrB から移動しません: ランタイムptrB->f()クラッシュを引き起こすことなく実行できます...std::moveクラス インターフェイスでの実装を非表示にします。

前もって感謝します。

0 投票する
3 に答える
1029 参照

llvm - llvm 変換パスによって行われた変更を確認する方法

Cプログラムで変換パス(デッドコードの削除など)によって行われた変更を確認する方法。ターミナルで次のコマンドを実行すると、IRを確認できる.bcファイルが作成されます。しかし、Cプログラムで -dce によって行われた変更を確認する方法。コマンド: $opt in.bc -o out.bc -dce

0 投票する
1 に答える
119 参照

c - Clang C から LLVM へのコンパイルで「誤ったコード」が排除される

C 用の clang コンパイラと、それが生成する中間コードを理解しようとしています。

コンパイルして LLVM-IR を生成する一連の関数がありますが、その理由がわかりません。

最初は次のとおりです。

これにより、LLVM コードが生成されます。

それは完全に理解できると思います。関数本体が定義されていません!

次の C 関数は次のとおりです。

これを clang でコンパイルすると、まったく同じ LLVM-IR が生成されます。コンパイラは本体がガベージであることを認識し、未定義を返します!!! これがガベージであることを LLVM が認識する方法は、オプティマイザです。Clang --> LLVM は「戻り値コレクター」規約を使用します -- 関数を定義するとき -- %1 が「戻り値」として割り当てられます。すべての return ステートメントがこの値を更新し、最終的に、関数本体の最後に LLVM の ret ステートメントが 1 つあり、基本的にこの値を返します。LLVM は、変数が更新または初期化されずに割り当てられ、返されたことを認識し、未定義に設定します。

今キッカーのために!

以下のLLVM-IRに変換されます。

何らかの理由で、未定義のコードが削除されます。(x<0) の場合、C 関数は未定義でなければなりません!! このコードが削除された理由を誰か説明できますか?

0 投票する
1 に答える
779 参照

compiler-construction - C++ 入力用の LLVM の FunctionPass

LLVM を介してコードを解析することにより、C/C++ コード内のすべての関数の名前を出力しようとしています。ここにある例を参照しましたhttp://llvm.org/docs/WritingAnLLVMPass.html#basic-code-required この例は C コード入力では問題なく動作しますが、C++ 入力では単純な Hello World プログラムで次の関数名が表示されます

__cxx_global_var_init

主要

グローバル_I_a

次に、ここで説明されているように、LLVM には iostream に関する特定の問題があることがわかりました。 -happens-when-i-include-iostream

コードから iostream を削除したところ、出力として "main" のみが得られました。

しかし、convertperm、findType、および main (iostream を持たない) という関数が含まれている多機能 C++ プログラムの場合、次の出力が得られました。

_Z11convertpermSs

_Z8findtypeSs

主要

多機能 C プログラムが正常に動作する

誰でもこの問題を解決できますか?

0 投票する
0 に答える
599 参照

assembly - ARMアセンブリがclangでフレームポインタを歩く

ARM アーキテクチャで -pg を使用して Clang 3.3 でいくつかのコードをコンパイルしています。空の C 関数が表示されます。

次のようになります。

これで、r7 がフレーム カウンターとして使用されていること、および -ffunction-section と -no-omit-frame-pointer が -ffunction-section および -no-omit-frame-pointer の場合、現在の呼び出しの呼び出し元のスタックと lr を逆方向にたどることができることがわかりました。指定。ただし、これを行うコードを記述しようとすると、機能しません。

呼び出し先の lr になろうとする r0 はここでは間違いなく間違っています。mov を使用したため、r1 も同様であると考えているため、lr にある完全な 32 ビットはありません。

誰かが私が間違っていることを指摘できますか?

0 投票する
1 に答える
888 参照

c++ - 複数の LLVM C++ モジュールをリンクすると、lli で segfaults が発生する

LLVM/clang で非常に単純な例を試していますが、失敗しているようです。

私は次のことを試します:

  1. clang++ -emit-llvm -c -x c++ -o main.bc -isystem include/ main.cc
  2. clang++ -emit-llvm -c -x c++ -o test_class.bc -isystem include/ test_class.cc
  3. llvm-link main.bc test_class.bc -o all.bc
  4. lli all.bc

ただし、 4. 失敗 (セグメンテーション違反):

これがどのように機能するかについて根本的な誤解がありますか? 私の最終的な目標は、libclang API を使用してコンパイルの部分を行うことですが、今のところ、ここで何が間違っているかを理解することは素晴らしいことです! ありがとう!

以下の例のソースコードを添付しました。

インクルード/test_class.h:

test_class.cc:

main.cc:

0 投票する
3 に答える
4132 参照

c++ - #define XX は C でどのような効果がありますか?

LLVM プロジェクトのソース コードでは、次のように表示されます。stdbool.h

最後の 4 行には from の 3 行があり#define X Xます。どうしてそうするか?どんな違いがあるの?trueこれにより、コンパイラーは、たとえば、を単に置き換えることを強制されませんtrueか?