re PR c/89734 (const qualifier on return type not erased inside __typeof__)

PR c/89734
	* c-decl.c (grokdeclarator): Call c_build_qualified_type on function
	return type even if quals_used is 0.  Formatting fixes.

	* gcc.dg/pr89734.c: New test.

From-SVN: r269789
This commit is contained in:
Jakub Jelinek 2019-03-19 07:55:31 +01:00 committed by Jakub Jelinek
parent 7babd3e4f1
commit 855cd9b166
4 changed files with 28 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2019-03-19 Jakub Jelinek <jakub@redhat.com>
PR c/89734
* c-decl.c (grokdeclarator): Call c_build_qualified_type on function
return type even if quals_used is 0. Formatting fixes.
2019-03-14 Richard Biener <rguenther@suse.de>
* c-tree.h (enum c_declspec_il): New.

View File

@ -6611,10 +6611,12 @@ grokdeclarator (const struct c_declarator *declarator,
quals_used &= TYPE_QUAL_ATOMIC;
if (quals_used && VOID_TYPE_P (type) && really_funcdef)
pedwarn (specs_loc, 0,
"function definition has qualified void return type");
"function definition has qualified void "
"return type");
else
warning_at (specs_loc, OPT_Wignored_qualifiers,
"type qualifiers ignored on function return type");
"type qualifiers ignored on function "
"return type");
/* Ensure an error for restrict on invalid types; the
DR#423 resolution is not entirely clear about
@ -6624,8 +6626,7 @@ grokdeclarator (const struct c_declarator *declarator,
&& (!POINTER_TYPE_P (type)
|| !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
error_at (loc, "invalid use of %<restrict%>");
if (quals_used)
type = c_build_qualified_type (type, quals_used);
type = c_build_qualified_type (type, quals_used);
}
type_quals = TYPE_UNQUALIFIED;

View File

@ -1,3 +1,8 @@
2019-03-19 Jakub Jelinek <jakub@redhat.com>
PR c/89734
* gcc.dg/pr89734.c: New test.
2019-03-18 Martin Sebor <msebor@redhat.com>
PR tree-optimization/89720

View File

@ -0,0 +1,12 @@
/* PR c/89734 */
/* { dg-do compile } */
/* { dg-options "" } */
typedef const int CI;
typedef _Atomic int AI;
CI foo (void);
const int foo (void);
AI baz (void);
_Atomic int baz (void);