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 /gcc | |
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
Diffstat (limited to 'gcc')
-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 |
5 files changed, 66 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 } } */ |