ollvmコンパイラ最適化バグ


最近ollvmでいくつかのコードをコンパイルして、主にsoに対していくつかの混同する操作を行う必要があって、1つのバグを発見して、以下のように記録します:コードセグメント1
jint begin_antidebug()
{

    pthread_t antidebugtid;
    int ret = 0;
    ret = pthread_create(&antidebugtid, NULL, antidebug_listen_thread, NULL);
    if(ret!=0)
    {
        LOGANTI("Create pthread error!
");         exit (1);     }     return 0;      }

上のコードセグメントは、スレッドの作成に失敗した場合、アプリケーションを直接終了するスレッドを作成するロジックです.このコードはandroid ndkのデフォルトのコンパイラやollvmコンパイラを使用せず、実行結果はコードロジックに従います.ただし、コードセグメント2の場合、次のようになります.
jint begin_antidebug()
{

    pthread_t antidebugtid;
    int ret = 0;
    ret = pthread_create(&antidebugtid, NULL, antidebug_listen_thread, NULL);
    if(ret!=0)
    {
        LOGANTI("Create pthread error!
");         exit (1);     }      }

このコードは上のコードと比較してreturn 0が1つ少なくなった.この文のこの時、2つのコンパイラはコンパイルの結果に違いがあり、android ndkのデフォルトのコンパイラがコンパイルしたコードは依然としてコードロジックに従って実行することができます.ollvmコンパイラがコンパイルしたコードはretが0に最適化され、スレッドの作成に成功したが、プロセスもexit(1)を実行する.脱退した
このようなbad codeを防ぐ方法はAndroidではありません.mkは次の行に参加します.LOCAL_CFLAGS+=-Werror強化検査タイプ、warningとerrorが現れるのと同じ処理