スマートコンフィグレータのコード生成によるバグの発生(その2)

初と申します。

https://community-ja.renesas.com/cafe_rene/forums-groups/tools/f/forum21/10596/thread

のスレッドの続きです。一応別スレッドにしました。

なんとなく、とりあえずカーソル当てたらレジスタの説明が出てくるようにはしたいと思い、「Index all header variants」にチェックを入れました。
そうすると、エラーがなくなって説明文が出てくるようになるのですが、

https://ja-support.renesas.com/knowledgeBase/17797612


にあるように、
・無効となるはずのシンボルが、エディタの画面上で有効に見えてしまう。
・索引付けの処理時間が延びて、操作性が低下する。
などの副作用があるようですが、無効となるはずのシンボルとはどういうものなのでしょうか。索引付の処理時間が伸びるとは、どういう事でしょうか。

一先ず、レジスタの説明は見えるようになったので、作業性は良くなったのですが、公式回答の「副作用」について具体的にどういう事なのか教えていただければと思います。
よろしくお願いいたします。

  • 追記:まったく同じプロジェクトで、デスクチップPCではここに書いた状態となりましたが、ノートPCの方では、「Index all header variants」をチェックしても、エラーが出たままで変わりありませんでした。この差異は何なのでしょうか....。

  • > 無効となるはずのシンボルとはどういうものなのでしょうか
    コンパイル時には参照されないヘッダファイルの中身までインデックスしてしまえばそうなります。

  • ほや様

    「コンパイル時には参照されない」とは最適化とは別に、例えばmath.hを使用していないプロジェクトがあるとして、その使用していないヘッダファイルの中身まで索引付されるから(探そうとするから)処理が重くなる、という解釈で合っていますでしょうか。

    たった今起きた現象なのですが、ワークスペースのウィンドウ設定から「Index all header variants」をチェックしても何も起きなかったのですが、プロジェクトのプロパティからインデクサーを開いて、「Index all header variants」にチェックを入れると、エラーがなくなってレジスタの説明が表示されるようになりました。

    結局、インデクサーのファイルスキップの設定を10000MBにしてみたりしましたが、「Index all header variants」でしか解決できなかったです。

  • > その使用していないヘッダファイルの中身まで索引付されるから(探そうとするから)処理が重くなる、という解釈で合っていますでしょうか。
    合っていると思います。

    一度インデックスされてしまうとそのシンボルは再評価されません。例えば同じ名前のdefineが異なる値で複数個所に宣言されていた場合、たまたま最初に見たのが正しい値だった時は問題ないのですが、そうでないと意図しない値で判断されてしまいます。そういう副作用もあります。

    ともあれ、コンパイラがヘッダファイルを順番に見て行くのと違ってindexingはかなり大雑把な処理になっているので全ての問題を設定で回避するのは無理があります。そこは妥協しながら使うものだと御理解戴くしかありません。

  • ほや様

    副作用についてよくわかりました。通常同じ名前のdefineを使用しないようにしていたとしても、プロジェクトが大きくなってくる、もしくは他プロジェクトで使用していたソースファイルなどを再利用した際など、思いがけず記述した場合は重症になる可能性がありますね。

    コードを記述している途中ではレジスタの説明が見れたりは便利なので「Index all header variants」をチェックして、記述が終わったら外すなど使い分けるのがよさそうですね。