aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-03-21 15:32:21 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-03-21 15:32:21 +0000
commit411cdbd841d21a48ebc7f89f6d62c60f3e0dad47 (patch)
tree7dac4958a64d9e0a01ed6573dd9934b15b0dd2cc /gcc
parent1cd9e4164e333f1c4bfc32ed3dd5550b2e625d4a (diff)
downloadgcc-411cdbd841d21a48ebc7f89f6d62c60f3e0dad47.zip
gcc-411cdbd841d21a48ebc7f89f6d62c60f3e0dad47.tar.gz
gcc-411cdbd841d21a48ebc7f89f6d62c60f3e0dad47.tar.bz2
re PR c/47939 (Missing DW_TAG_typedef for qualified types)
2011-03-21 Richard Guenther <rguenther@suse.de> PR c/47939 * c-decl.c (grokdeclarator): Drop to the main variant only for array types. Drop flag_gen_aux_info check. * gcc.dg/debug/dwarf2/pr47939-1.c: New testcase. * gcc.dg/debug/dwarf2/pr47939-2.c: Likewise. * gcc.dg/debug/dwarf2/pr47939-3.c: Likewise. * gcc.dg/debug/dwarf2/pr47939-4.c: Likewise. From-SVN: r171245
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-decl.c10
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c8
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c8
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c8
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c8
7 files changed, 55 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 55e6e95..30542ef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2011-03-21 Richard Guenther <rguenther@suse.de>
+ PR c/47939
+ * c-decl.c (grokdeclarator): Drop to the main variant only
+ for array types. Drop flag_gen_aux_info check.
+
+2011-03-21 Richard Guenther <rguenther@suse.de>
+
PR translation/47911
* params.def (lto-partitions): Fix typo.
(lto-min-partition): Fix wording.
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 4e82f28..1af3d23 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -4888,6 +4888,7 @@ grokdeclarator (const struct c_declarator *declarator,
const char *errmsg;
tree expr_dummy;
bool expr_const_operands_dummy;
+ enum c_declarator_kind first_non_attr_kind;
if (TREE_CODE (type) == ERROR_MARK)
return error_mark_node;
@@ -4907,6 +4908,7 @@ grokdeclarator (const struct c_declarator *declarator,
{
const struct c_declarator *decl = declarator;
+ first_non_attr_kind = cdk_attrs;
while (decl)
switch (decl->kind)
{
@@ -4918,6 +4920,8 @@ grokdeclarator (const struct c_declarator *declarator,
case cdk_pointer:
funcdef_syntax = (decl->kind == cdk_function);
decl = decl->declarator;
+ if (first_non_attr_kind == cdk_attrs)
+ first_non_attr_kind = decl->kind;
break;
case cdk_attrs:
@@ -4928,6 +4932,8 @@ grokdeclarator (const struct c_declarator *declarator,
loc = decl->id_loc;
if (decl->u.id)
name = decl->u.id;
+ if (first_non_attr_kind == cdk_attrs)
+ first_non_attr_kind = decl->kind;
decl = 0;
break;
@@ -5034,7 +5040,9 @@ grokdeclarator (const struct c_declarator *declarator,
error_at (loc, "conflicting named address spaces (%s vs %s)",
c_addr_space_name (as1), c_addr_space_name (as2));
- if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
+ if ((TREE_CODE (type) == ARRAY_TYPE
+ || first_non_attr_kind == cdk_array)
+ && TYPE_QUALS (element_type))
type = TYPE_MAIN_VARIANT (type);
type_quals = ((constp ? TYPE_QUAL_CONST : 0)
| (restrictp ? TYPE_QUAL_RESTRICT : 0)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 570ab6f..8bce526 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2011-03-21 Richard Guenther <rguenther@suse.de>
+
+ PR c/47939
+ * gcc.dg/debug/dwarf2/pr47939-1.c: New testcase.
+ * gcc.dg/debug/dwarf2/pr47939-2.c: Likewise.
+ * gcc.dg/debug/dwarf2/pr47939-3.c: Likewise.
+ * gcc.dg/debug/dwarf2/pr47939-4.c: Likewise.
+
2011-03-21 Jakub Jelinek <jakub@redhat.com>
PR target/48213
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c
new file mode 100644
index 0000000..7854fdf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -g -dA" } */
+
+typedef struct _Harry { int dummy; } Harry_t;
+Harry_t harry;
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_name: \"Harry_t\"" } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c
new file mode 100644
index 0000000..8b623ae
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -g -dA" } */
+
+typedef const struct _Harry { int dummy; } Harry_t;
+Harry_t harry;
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_name: \"Harry_t\"" } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c
new file mode 100644
index 0000000..374e6cc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -g -dA" } */
+
+typedef struct _Harry { int dummy; } Harry_t;
+const Harry_t harry[5];
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_name: \"Harry_t\"" } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c
new file mode 100644
index 0000000..57db399
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -g -dA" } */
+
+typedef const struct _Harry { int dummy; } Harry_t;
+Harry_t harry[10];
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_name: \"Harry_t\"" } } */
+/* { dg-final { cleanup-saved-temps } } */