diff options
author | Mark Wielaard <mjw@redhat.com> | 2014-12-08 22:32:23 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2014-12-08 22:32:23 +0000 |
commit | bc3518da23383b0e173020a46334fe22b6b67891 (patch) | |
tree | 531ce47029cd14edfcc8e5647401475bb0f0b787 | |
parent | 009a34807ec71e18107582878b61096a584110a2 (diff) | |
download | gcc-bc3518da23383b0e173020a46334fe22b6b67891.zip gcc-bc3518da23383b0e173020a46334fe22b6b67891.tar.gz gcc-bc3518da23383b0e173020a46334fe22b6b67891.tar.bz2 |
DWARFv5 Emit DW_TAG_atomic_type for C11 _Atomic.
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.
From-SVN: r218496
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/debug/dwarf2/atomic.c | 15 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c | 34 | ||||
-rw-r--r-- | include/ChangeLog | 5 | ||||
-rw-r--r-- | include/dwarf2.def | 2 |
7 files changed, 73 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c44fce6..8e8de74 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index ca1e3ef..34b327e7 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -10551,7 +10551,7 @@ modified_type_die (tree type, int cv_quals, dw_die_ref context_die) 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; @@ -10564,6 +10564,10 @@ modified_type_die (tree type, int cv_quals, dw_die_ref context_die) 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); @@ -10625,6 +10629,7 @@ modified_type_die (tree type, int cv_quals, dw_die_ref context_die) 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 }, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 79963a7..08ddd7b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +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 diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/atomic.c b/gcc/testsuite/gcc.dg/debug/dwarf2/atomic.c new file mode 100644 index 0000000..187e695 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/atomic.c @@ -0,0 +1,15 @@ +/* { 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 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c new file mode 100644 index 0000000..efa3fa0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/stacked-qualified-types-3.c @@ -0,0 +1,34 @@ +/* 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 } } */ diff --git a/include/ChangeLog b/include/ChangeLog index e0baca9..632420c 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,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 diff --git a/include/dwarf2.def b/include/dwarf2.def index 8533a3e..ea8127c 100644 --- a/include/dwarf2.def +++ b/include/dwarf2.def @@ -133,6 +133,8 @@ DW_TAG (DW_TAG_shared_type, 0x40) 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) |