タグ

言語とClangに関するmohnoのブックマーク (1)

  • 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 /" これは以下のようなコードと同じだ。

    mohno
    mohno 2017/09/26
    「未定義の挙動はありえないのでその場合は除外してよい」←ビックリだけど、そもそも元のコードが間違っているわけで、特に深刻な問題というわけではないな。
  • 1