Oracle Solaris Studio 12.2 Discover および Uncover ユーザーズガイド

機械命令はソースコードとは異なる場合がある

Discover は機械コード上で動作します。ツールは、ロードやストアなどの機械命令でエラーを検出し、それらのエラーをソースコードと相互に関連付けます。一部のソースコード文は関連付けられている機械命令がないため、Discover は明白なユーザーエラーを検出していないように思われる場合があります。たとえば、次の C コードフラグメントを考えてみましょう:

  int *p = (int *)malloc(sizeof(int));
  int i;

  i = *p;  /* compiler may not generate code for this statement */
  printf("Hello World!\n");

  return;

p で示されたアドレスに格納された値を読み取ることは、メモリーが初期化されていないため、潜在的なユーザーエラーとなります。ただし、最適化コンパイラは、変数 i が使用さていないことを検出するため、メモリーから読み取り、i に割り当てる文のコードは、生成されません。この場合、Discover は非初期化メモリーの使用 (UMR) を報告しません。