[Tomoyo-dev 852] Avoiding gcc bug

Zurück zum Archiv-Index

Naohiro Aota nao.a****@gmail*****
2008年 7月 20日 (日) 00:29:33 JST


青田です。

linux kernel の vanilla source に TOMOYO 1.6.3 の patch をあてたものを
Gentoo の x86_64-pc-linux-gnu-gcc-4.3.1 でコンパイルしたところ以下のよう
なエラーが出て止まってしまいました。

  CC      fs/tomoyo_network.o
fs/tomoyo_network.c: In function ‘save_ipv6_address’:
fs/tomoyo_network.c:79: 警告: statement with no effect
fs/tomoyo_network.c:79: 警告: statement with no effect
fs/tomoyo_network.c:79: 警告: statement with no effect
fs/tomoyo_network.c:79: 警告: statement with no effect
fs/tomoyo_network.c:65: internal compiler error: セグメンテーション違反です
完全なバグ報告を送って下さい。
適切ならばプリプロセス後のソースをつけてください。
<http://bugs.gentoo.org/> を見れば方法が書いてあります。
make[1]: *** [fs/tomoyo_network.o] エラー 1
make: *** [fs] エラー 2

また、 x86_64-pc-linux-gnu-gcc-4.2.4 では止まりはしなかったものの同様の警
告が出ました。

おそらく gcc のバグだろうと調べてみたところ

     1	int main(void)
     2	{
     3		static const int size = 16;
     4		struct structA {
     5		  int foo[size];
     6		};
     7		struct structB {
     8		  int foo[16];
     9		};
    10		struct structA *ptrA;
    11		struct structB *ptrB;
    12	
    13		ptrA = (typeof(*ptrA) *) 0x12345;
    14		ptrB = (typeof(*ptrB) *) 0x67890;
    15	
    16		ptrA = ({ (typeof(*ptrA) *) 0x12345; });
    17		ptrB = ({ (typeof(*ptrB) *) 0x67890; });
    18	
    19		return 0;
    20	}

このような test.c をコンパイルすると以下のように出力されることがわかりま
した。

% gcc -Wall test.c
test.c: In function ‘main’:
test.c:16: 警告: statement with no effect

おそらく gcc のミスで ({}) の中で const を配列の大きさとしてとる配列を含
む構造体の typeof がとれなくなっているのではないかと思います。

警告が出ていても特に実害はなく、コンパイルできないのも gcc のせいなのです
が、一応最新の gcc でコンパイルが通らないというのは落ち着かないので、とり
あえず Gentoo 用に以下のようなパッチをあててもかまいませんか?

また、この問題は他の環境でも起こるのでしょうか? よろしければ追試をお願い
します。

--- tomoyo_network.c~	2008-07-20 00:14:26.000000000 +0900
+++ tomoyo_network.c	2008-07-20 00:14:57.000000000 +0900
@@ -65,7 +65,7 @@
 {
 	static const u8 block_size = 16;
 	struct addr_list {
-		struct in6_addr addr[block_size];
+		struct in6_addr addr[16];
 		struct list1_head list;
 		u32 in_use_count;
 	};

--
青田




tomoyo-dev メーリングリストの案内
Zurück zum Archiv-Index