Issue 131112.1: Add DW_TAG_atomic_type for C11 _Atomic

Author: Joseph Myers
Champion: Michael Eager
Date submitted: 2013-11-12
Date revised:
Date closed:
Type: Enhancement
Status: Accepted
DWARF Version: 5
Section 5.2, pg 81

Background: 

ISO C11 adds the type qualifier _Atomic.  DW_TAG_atomic_type should be added 
to describe this in DWARF, analogously to the existing tags for const, 
volatile and restrict.

Discussion:

ISO C11 creates a new qualifier _Atomic which can be used in the same context
as const, volatile, and restric qualifiers.  This means that the _Atomic qualifier
can be used in a way which is order dependant, similar to the use of volatile
or const:

   volatile int const * hwaddr = 0x1234;

Presumably, one could write the following:

   volatile _Atomic int const _Atomic * hwaddr = 0x1234;

To insure that access to the pointer (hwaddr) and the object it points to 
are both access atomically.

Proposed changes:

Pg 8: Table 2.1: Tag names

  Add DW_TAG_atomic_type

Pg 87: Table 5.3: Type modifier tags

  Add DW_TAG_atomic_type    C atomic qualified type

Pg 157: Table 7.1: Tag encodings

  Add DW_TAG_atomic_type    0x47

Appendix A: Table A.1: Attributes by tag value
  Add following:

  DW_TAG_atomic_type    DW_AT_allocated
            DW_AT_associated
            DW_AT_data_location
            DW_AT_name
            DW_AT_sibling

  Note:  This is adapted from DW_TAG_const_type, etc.  Is it reasonable
         to have a name or location associated with any of these TAGs?
     These attribute would be on the variable DIE, not the type.

---
Accepted 12/17/2013