コンパイラのバグ?が見つかったときどうしますか。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
組木紙織

コンパイラのバグ?が見つかったときどうしますか。

#1

投稿記事 by 組木紙織 » 18年前

今日。コンパイラのバグ?と思われるものを見つけました。
ソースコードは長くなるのでほとんど記述しませんが、

起きた現象はある自作関数中のコンソール出力の部分が全て無視されるというものです。

Releaseで実行したり、Debugでステップ実行をすると正しく動くのですが、
Debugでデバッグなしで実行をしたときのみ上記のような現象が起きます。

気をつけていれば気にすることでもなく、特定のソースのみ常に現象が起こり、少し変更を
かけたらすぐにこの現象は起こらなくなるので、別段何の問題もないのですが、

コンパイラのバグが起きたときの対処をどのようにしているのか気になったので投稿をしました。

#コンパイラを変えるということは不可能なので、その対処法だけはできません。

Sleepy

Re:コンパイラのバグ?が見つかったときどうしますか。

#2

投稿記事 by Sleepy » 18年前

怪しいのは以下の3点です。

変数の初期化漏れ。
領域破壊。
スタックオーバーフロー。

Justy

Re:コンパイラのバグ?が見つかったときどうしますか。

#3

投稿記事 by Justy » 18年前

 ソースを見ないと何ともいえませんが、そういう場合大抵ソースコードにバグがあります。

 もし、本当にコンパイラのバグであるなら、その周辺をアセンブルコードを見ながら
ステップ実行してどのインストラクションでどう間違ったコードを出力したのか
調べるしかありません。
(或いは、あきらめてMLかBBSに丸ごと投げて調べて貰うとか)


> コンソール出力の部分が全て無視されるというものです
 単純にバッファに溜まってる可能性がありそうです。
 '\n'を最後に入れるとか、fflush()とかを使って出力ストリーム内のバッファを
出力してみてはどうでしょうか?

組木紙織

Re:コンパイラのバグ?が見つかったときどうしますか。

#4

投稿記事 by 組木紙織 » 18年前

C言語系の話では無いのでソースコードここで上げるのはどうかと思っているのですが、
(言語はfortran77です。というより始めに言語をかくべきでしたね。忘れてました。)

>変数の初期化漏れ。
全部初期化してます。

>領域破壊。
動的に領域を確保していないので関係ないと思います。

>スタックオーバーフロー
PCのスタックを消費するほど深い再帰は使ってないはずなんですが。
#それとも私のほうが勘違いしてる?

とりあえずzipで圧縮したものを上げておきます。
一応簡単な説明文を書き込んでおきます。
大学の卒論の関係なので何の計算をしているのか分からないかもしれませんが、
何処で何をしたら現象が起きるかという部分はコメントで入れてあります。

>アセンブルコード
何かあるとすぐアセンブルコードを表示するので、見るだけなら慣れてきた。。。
意味は全然読めないですが。

Justy

Re:コンパイラのバグ?が見つかったときどうしますか。

#5

投稿記事 by Justy » 18年前

 fortranですか。

 申し訳ない。ちょっと手が出ないです。
 でもちょっと気になったところが。

 TRparaを get2spacePot()の引数に指定していますが、未初期化な気がします。
 代わりに TPparaという変数?を 0で初期化してたりするので、このあたりが怪しいような。

組木紙織

Re:コンパイラのバグ?が見つかったときどうしますか。

#6

投稿記事 by 組木紙織 » 18年前

>TPpara =0
>PSpara =0

この部分ですか?
私がしたかったのは以下です。
TRpara =0
PSpara =0

多分これで、問題なくなるとおもいます。
まさか。PとRのミスあったなんて、思いもよらなかったです。

#fortranは宣言が絶対に必要なわけではないので、変数名のミスに気づきにくくて困ります。

Justy

Re:コンパイラのバグ?が見つかったときどうしますか。

#7

投稿記事 by Justy » 18年前

 やっぱり、そこはタイポでしたか。
 それでうまくいくといいですね。


> 変数名のミスに気づきにくくて困ります
 コンパイラオプションで何か警告とかないですか?

組木紙織

Re:コンパイラのバグ?が見つかったときどうしますか。

#8

投稿記事 by 組木紙織 » 18年前

今使っているコンパイラの詳しい説明書がなく、詳しく使い方を教えてくれる人もいなかったので
コンパイラオプションの設定の仕方がまだよくわからないのです。

色んなことを試してはいますが、言語仕様自体に宣言なしの変数を一部容認しているので、
(i,j,k,l,m,nなどは宣言なしで扱える整数型となっています。ほかはどうだったかな覚えていませんが、)

期待はしないほうがいいのかなと思います。

hoge

Re:コンパイラのバグ?が見つかったときどうしますか。

#9

投稿記事 by hoge » 18年前

そのコンパイラではimplicit noneは使えないの?

TT414

Re:コンパイラのバグ?が見つかったときどうしますか。

#10

投稿記事 by TT414 » 18年前

>i,j,k,l,m,nなどは宣言なしで扱える整数型となっています。ほかはどうだったかな覚えていませんが

はi,j,k,l,m,nから始まる変数は整数型、i~n以外の変数は実数型です。

GPGA

Re:コンパイラのバグ?が見つかったときどうしますか。

#11

投稿記事 by GPGA » 18年前

>i,j,k,l,m,nから始まる変数は整数型、i~n以外の変数は実数型です。
Fortranでこの仕様があったため、Cでfor文を使用するときの
ループ変数に、iやjが使われているとか、いないとか。

組木紙織

Re:コンパイラのバグ?が見つかったときどうしますか。

#12

投稿記事 by 組木紙織 » 18年前

>そのコンパイラではimplicit noneは使えないの?

実際に使ってみたら使えました。
私の持っている参考書にその記述がなかったので、知らなかっただけでした。
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る