This implements the DW_TAG_atomic_type for C11 _Atomic proposal as adopted
in the latest DWARF5 draft. http://dwarfstd.org/ShowIssue.php?issue=131112.1
gcc/ChangeLog
PR debug/60782
* dwarf2out.c (modified_type_die): Handle TYPE_QUAL_ATOMIC.
gcc/testsuite/ChangeLog
PR debug/60782
* gcc.dg/debug/dwarf2/atomic.c: New test.
* gcc.dg/debug/dwarf2/stacked-qualified-types-3.c: Likewise.
include/ChangeLog
PR debug/60782
* dwarf2.def: Add DWARFv5 DW_TAG_atomic_type.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218496
138bc75d-0d04-0410-961f-
82ee72b054a4
+2014-12-08 Mark Wielaard <mjw@redhat.com>
+
+ PR debug/60782
+ * dwarf2out.c (modified_type_die): Handle TYPE_QUAL_ATOMIC.
+
2014-11-15 David Wohlferd <dw@LimeGreenSocks.com>
PR target/61692
dw_die_ref mod_scope;
/* Only these cv-qualifiers are currently handled. */
const int cv_qual_mask = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE
- | TYPE_QUAL_RESTRICT);
+ | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC);
if (code == ERROR_MARK)
return NULL;
if (dwarf_version < 3)
cv_quals &= ~TYPE_QUAL_RESTRICT;
+ /* Likewise for DW_TAG_atomic_type for DWARFv5. */
+ if (dwarf_version < 5)
+ cv_quals &= ~TYPE_QUAL_ATOMIC;
+
/* See if we already have the appropriately qualified variant of
this type. */
qualified_type = get_qualified_type (type, cv_quals);
struct qual_info { int q; enum dwarf_tag t; };
static const struct qual_info qual_info[] =
{
+ { TYPE_QUAL_ATOMIC, DW_TAG_atomic_type },
{ TYPE_QUAL_RESTRICT, DW_TAG_restrict_type },
{ TYPE_QUAL_VOLATILE, DW_TAG_volatile_type },
{ TYPE_QUAL_CONST, DW_TAG_const_type },
+2014-12-08 Mark Wielaard <mjw@redhat.com>
+
+ PR debug/60782
+ * gcc.dg/debug/dwarf2/atomic.c: New test.
+ * gcc.dg/debug/dwarf2/stacked-qualified-types-3.c: Likewise.
+
2014-11-15 David Wohlferd <dw@LimeGreenSocks.com>
PR target/61692
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -gdwarf-5 -dA" } */
+
+struct Atomics
+{
+ _Atomic(int) counter;
+ struct Pointer
+ {
+ _Atomic volatile char *p;
+ } p;
+};
+
+struct Atomics a;
+
+/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_atomic_type" 2 } } */
--- /dev/null
+/* make sure we don't duplicate type qualifiers unneeded. */
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -gdwarf-5 -dA" } */
+
+/* This should give us:
+ - One const type pointing to a char
+ - One volatile type pointing to a char
+ - One atomic type pointing to a char
+ - Either one const type pointing to the volatile type pointing to a char
+ or one volatile type pointing to the const type pointing to a char.
+ But not both.
+ - Either one volatile type pointing to an atomic type pointing to a char
+ or one atomic type pointing to a volatile type pointing to a char.
+ But not both.
+ - One restrict type pointing to a char pointer.
+ - One atomic type pointing to a char pointer.
+ - Either one restrict type pointing to an atomic type pointing to a char
+ pointer or one atomic type pointing to a restrict type pointing to a
+ char pointer.
+ But not both. */
+
+
+char a;
+const char b;
+volatile const char c;
+volatile char d;
+const volatile char e;
+_Atomic char f;
+_Atomic volatile char g;
+char * _Atomic restrict h;
+char * _Atomic i;
+char * restrict j;
+
+/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_(?:const|volatile|atomic|restrict)_type" 8 } } */
+2014-12-08 Mark Wielaard <mjw@redhat.com>
+
+ PR debug/60782
+ * dwarf2.def: Add DWARFv5 DW_TAG_atomic_type.
+
2014-11-21 Mark Wielaard <mjw@redhat.com>
* dwarf2.h: Add DW_LANG_C_plus_plus_11, DW_LANG_C11 and
DW_TAG (DW_TAG_type_unit, 0x41)
DW_TAG (DW_TAG_rvalue_reference_type, 0x42)
DW_TAG (DW_TAG_template_alias, 0x43)
+/* DWARF 5. */
+DW_TAG (DW_TAG_atomic_type, 0x47)
DW_TAG_DUP (DW_TAG_lo_user, 0x4080)
DW_TAG_DUP (DW_TAG_hi_user, 0xffff)