Issue #14200 has been updated by k0kubun (Takashi Kokubun).


https://github.com/ruby/ruby/pull/2064 で普通にstdbool.hを使えると見なすことにしているので、Oracle Solaris Studio 12.4やそれ以前での (r61326 のような対応をしない場合の) 現在のstdbool.hの挙動について補足します。

## Oracle Solaris Studio 12.4

> https://docs.oracle.com/cd/E57200_01/html/E57228/cc-1.html
> 最初のデフォルトは c11 であり、ANSI C11 で定義されている C ソース言語を拡張したものを受け入れることを意味します。2 番目のデフォルトはありません。代わりに、値なしで -std を指定すると、エラーが生成されます。
>
> フラグ -Xc、-Xa、-Xt、または -xtransition のいずれかを指定すると、-std の最初のデフォルトは無効になり、コンパイラではデフォルトで -xc99=all,no_lib が指定されます。-Xs を指定すると、最初のデフォルトは無効になり、コンパイラではデフォルトで -xc99=none が指定されます。-xc99 を指定すると、-std の最初のデフォルトは無効になり、コンパイラは -xc99 の指定を受け入れます。

従ってデフォルト(`-std=c11` 相当)では使えるはずですが、このチケットでレポートされている環境では「-Xc、-Xa、-Xt、または -xtransition のいずれか」が指定されていて `-xc99=all,no_lib` 相当になっていたか `-Xs` が指定されていて `-xc99=none` になっていたと理解しています。

一方、最近 r66605 で私が追加した `AC_PROG_CC_C99` により、configure時にstdbool.hを使ったコードのコンパイル可否を検証して必要に応じて `-xc99=all` を付加するようになったため、 r61326 は不要になったと理解しています。

## Oracle Solaris Studio 12.2

> https://docs.oracle.com/cd/E19205-01/821-2496/bjate/index.html
> -xc99 を指定しない場合は、コンパイラではデフォルトで -xc99=all,no_lib が設定されます。値を指定しないで -xc99 を指定すると、オプションは -xc99=all に設定されます。

これにより、こちらはデフォルトでもstdbool.hが使えないと理解していますが、 `AC_PROG_CC_C99` により `-xc99=all` が付加され、configureにより stdbool.h が利用可能になっていると理解しています。

----------------------------------------
Bug #14200: addr2line.c compile error with C89 compilers on Solaris 10
https://bugs.ruby-lang.org/issues/14200#change-76094

* Author: ngoto (Naohisa Goto)
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
r60841 にて、 addr2line.c では stdbool.h を使用するようになりましたが、
stdbool.h は C99 にて追加された仕様のため、
デフォルトが C89 になっている Solaris 10 上の古めのコンパイラの多くでは、
Solarisの標準ヘッダファイルに含まれるC標準バージョンチェックを通過できず、
以下のようなエラーになり、コンパイルに失敗します。

~~~
cc -errtags=yes  -xO4 -xtarget=sparc64xplus -m64 -DRUBY_DEVEL=1 -DRUBY_EXPORT -I/usr/local/64/lib/libffi-3.0.10/include -I/usr/local/64/include  -D_XOPEN_SOURCE=500   -I. -I.ext/include/sparc64-solaris2.10 -I./include -I. -I./enc/unicode/10.0.0 -o addr2line.o -c addr2line.c
"/usr/include/stdbool.h", line 42: #error: "Use of <stdbool.h> is valid only in a c99 compilation environment."
cc: acomp failed for addr2line.c
make: *** [addr2line.o] Error 2
~~~

これは Solaris 10 上の Oracle Solaris Studio 12.4 でのエラーです。
他に、古い gcc や Fujitsu C Compiler などでも同様のエラーとなります。

なお、Solaris10上の多少古めのコンパイラでも、C99は概ねサポートしており、
オプションでC99準拠を指定したり、それ相当の _XOPEN_SOURCE を定義すると、
コンパイルは通るはずではありますが、それに伴う副作用もあるので、
現時点では、容易に可能なら、それを指定しなくても通るようにしたいと思っています。




-- 
https://bugs.ruby-lang.org/