【C/C++】Strict Aliasing Rule

全ての type-punned pointer を生まれる前に消し去りたい.全ての宇宙,過去と未来の全ての type-punned pointer を,この手で.
15
Akso de la Malbono @Cryolite

C++03 だとユーザ定義型も含めてまともに strict aliasing rule を満たした形で可搬に書くのやっぱり無理ちゃいますの? という結論.

2011-08-17 00:06:33
Akso de la Malbono @Cryolite

C++0x (N3291) だと union のメンバになれる型の制約がほぼ外れるから,問題が解消されて,ユーザ定義型も含めて可搬に strict aliasing rule を充足するように書くことが可能になるはずだけれど.

2011-08-17 00:08:30
Kazutoshi SATODA @k_satoda

@Cryolite union の制限が緩くなったことで可搬性を広げられるようなことがあるとは思ってない(ちゃんとアラインされた char バッファを使い回せば同等だと思っている)のですが、具体的に何を「書く」ことについての話なんでしょうか?

2011-08-17 00:22:24
Akso de la Malbono @Cryolite

@k_satoda うーん,それもそうですよね.もう1度, align された char バッファの使いまわしが安全であることを規格の上から出せるかという視点から再度確認してきます.

2011-08-17 00:33:25
おっさん @kmt_t

strict-aliasing rulesは自分もハマったけど、頻発する割にはソリューションがケースバイケースで面倒くさいですね。>http://t.co/OSOXzes

2011-08-17 00:52:18
おっさん @kmt_t

個人的に「-fno-strict-aliasing」は行儀の悪いコードを放置するような気がしてしまします(気がするだけ)。どうなんでしょうね?Cスタイルキャストもあれだし。

2011-08-17 00:53:53
おっさん @kmt_t

volatileってコンパイラのメモリアクセスのリオーダーって抑止できたっけ?

2011-08-17 00:57:27
おっさん @kmt_t

unionのメンバーの場合は100%エイリアスされていることはわかってるんだから、コンパイラはunionメンバのアクセスのリオーダーはしない気がするんだけど。というかしたらコンパイラのバグの気がする。

2011-08-17 01:02:57
Kazutoshi SATODA @k_satoda

@Cryolite 今ある規格・ドラフトだけだと "reuse" によるオブジェクトの配置に穴があるようにも読めてしまいますが、未解決の issue #1116, #1072 が元々の意図を把握するうえで参考になると思います。 http://t.co/yUv9Wbg

2011-08-17 01:11:45
Akso de la Malbono @Cryolite

さっきなんかごちゃごちゃつぶやいていたのはアラインメントの制約を満たした char バッファを使いまわした場合が抜けてるので変な結論になってて, Boost のヘッダ由来の GCC の警告は(自分が把握している限り) false positive だという結論で納得しつつある.

2011-08-17 01:12:27
Akso de la Malbono @Cryolite

@k_satoda だいたい納得してはいるんですが, "access ○○ through △△" が指している意味内容をどうしても逆の意味に誤解しそうになるのがががが.

2011-08-17 01:40:03