This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH, C++] Fix PR63366: __complex not equivalent to __complex double in C++


Ping?

> -----Original Message-----
> From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches-
> owner@gcc.gnu.org] On Behalf Of Thomas Preud'homme
> Sent: Monday, September 29, 2014 3:33 PM
> To: gcc-patches@gcc.gnu.org
> Subject: [PATCH, C++] Fix PR63366: __complex not equivalent to
> __complex double in C++
> 
> According to a comment in grokdeclarator in file gcc/cp/decl.c:
> 
>     /* If we just have "complex", it is equivalent to
>     "complex double", but if any modifiers at all are specified it is
>     the complex form of TYPE. E.g, "complex short" is
>     "complex short int". */
> 
> Yet, __complex is equivalent to __complex int as shows the following
> testcase:
> 
> #include <typeinfo>
> 
> int
> main (void)
> {
>   return typeid (__complex) != typeid (__complex int);
> }
> 
> The following patch fix the problem.
> 
> 
> ChangeLog are as follows:
> 
> *** gcc/cp/ChangeLog ***
> 
> 2014-09-26  Thomas Preud'homme  <thomas.preudhomme@arm.com>
> 
>	PR C++/63366
> 	* decl.c (grokdeclarator): Set defaulted_int when defaulting to
> int
> 	because type is null.
> 
> *** gcc/testsuite/ChangeLog ***
> 
> 2014-10-26  Thomas Preud'homme  <thomas.preudhomme@arm.com>
> 
>	PR C++/63366
> 	* g++.dg/torture/pr63366.C: New test.
> 
> 
> diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
> index d26a432..449efdf 100644
> --- a/gcc/cp/decl.c
> +++ b/gcc/cp/decl.c
> @@ -9212,6 +9212,7 @@ grokdeclarator (const cp_declarator *declarator,
>                   "ISO C++ forbids declaration of %qs with no type", name);
> 
>        type = integer_type_node;
> +      defaulted_int = 1;
>      }
> 
>    ctype = NULL_TREE;
> diff --git a/gcc/testsuite/g++.dg/torture/pr63366.C
> b/gcc/testsuite/g++.dg/torture/pr63366.C
> new file mode 100644
> index 0000000..af59b98
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/torture/pr63366.C
> @@ -0,0 +1,11 @@
> +// { dg-do run }
> +// { dg-options "-fpermissive" }
> +// { dg-prune-output "ISO C\\+\\+ forbids declaration of 'type name'
> with no type" }
> +
> +#include <typeinfo>
> +
> +int
> +main (void)
> +{
> +  return typeid (__complex) != typeid (__complex double);
> +}
> 
> 
> Is this ok for trunk?
> 
> Best regards,
> 
> Thomas Preud'homme
> 
> 
> 





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]