On Fri, 4 Mar 2005, Perrin Meyer wrote:

> As someone who writes a lot of computational acoustics code, I'd really like
> to start using these features, or at least have better explanation of what
> is broken and what isn't. I've been using _Complex variables in gcc for a
> while now, and as far as I can tell, that part is working fine.

Are the explanations on that page:

     * Complex numbers support may be broken (some problems with
       passing/returning complex values on 64-bit targets, and not
       checked against the requirements of the C99 standard). However,
       the _Complex keyword now works.

and

     * The C99 semantics of variable length arrays (VLAs) are not fully
       implemented by the existing GCC extension: the concept of variably
       modified (VM) types, and the rules for what identifiers can be
       declared with VLA or VM types, are not implemented (for example,
       GCC allows elements of VM type in a structure with block scope);
       while the syntax for arrays to be declared with [*] in parameter
       declarations is present, the semantics are not; and in general the
       implementation of VLAs has not been checked against C99
       requirements.

inadequate?

My view would be that once logarithmic reduction for complex 
multiplication and division is implemented, and once the 64-bit problems 
are known to be resolved, it would make sense to do a detailed 
line-by-line comparison of the requirements of the standard for complex 
number support against the implementation, writing testcases in the 
process, and mark complex number support done if the results of this 
process indicate that it indeed is done.

As for VLAs, bugs 7948, 12913, 18740 and 19771 are a small sampling of 
specific issues, beyond the general comments quoted above.  VLAs are 
complicated and there are several obscure or problematic parts of the 
standard relating to them (I've just sent the UK C Panel convenor three 
DRs on the subject to pass to the WG14 convenor); they also interact with 
constant expressions.  I do *not* recommend attempting isolated fixes for 
random VLA issues (including that we no longer accept [*][*] as a 
side-effect of rejecting [][]; since we don't meaningfully implement the 
semantics of [*] I don't consider this significant or a regression) 
without first properly understanding all the standard requirements and the 
interaction with GNU extensions and auditing what is currently implemented 
and preparing thorough testcases.

  void f(int a, int (*b)[*], int c[static sizeof(*b)]);

is valid C99 code.  What exactly it means is more obscure.

-- 
Joseph S. Myers               http://www.srcf.ucam.org/~jsm28/gcc/
    [EMAIL PROTECTED] (personal mail)
    [EMAIL PROTECTED] (CodeSourcery mail)
    [EMAIL PROTECTED] (Bugzilla assignments and CCs)

Reply via email to