[gnu.gcc.bug] manual says constructor expressions must yield unions or aggregates

eggert@twinsun.com (Paul Eggert) (10/31/89)

The GCC manual says that constructor expressions must yield a value of
structure, union, or array type.  But this doesn't make sense:

	V = (T){X};

should be equivalent to

	{ T temp = {X}; V = temp; }

regardless of whether T is a structure, union, or array type.

Furthermore, it doesn't agree with GCC 1.36 (Sun-3, SunOS4.0.3c, with fix from
rms@ai.mit.edu 1989/10/19 19:15:07 EDT that permits union initializers with
elided braces), which lets constructor expressions yield values of other
types.  For example, the program

	main() { return (int){0}; }

compiles to the same code as

	main() { return 0; }


Here is a fix.

*** old/gcc.texinfo	Mon Oct 30 16:59:22 1989
--- new/gcc.texinfo	Mon Oct 30 16:49:04 1989
***************
*** 2668,2675 ****
  
  GNU C supports constructor expressions.  A constructor looks like a cast
  containing an initializer.  Its value is an object of the type specified in
! the cast, containing the elements specified in the initializer.  The type
! must be a structure, union or array type.
  
  Assume that @code{struct foo} and @code{structure} are declared as shown:
  
--- 2668,2674 ----
  
  GNU C supports constructor expressions.  A constructor looks like a cast
  containing an initializer.  Its value is an object of the type specified in
! the cast, containing the elements specified in the initializer.
  
  Assume that @code{struct foo} and @code{structure} are declared as shown: