# DW_AT_object_pointer: clarify wording around implicit versus
explicit object parameters

## Background

With C++23 we got the ability to explicitly spell out in source the
object parameter of a class method [1]. The object parameter for such
methods is not compiler-generated and is explicitly named by the user.
The wording of the current DWARF spec assumes object parameters are
implicit and specifies that those parameters be marked
DW_AT_artificial, despite them not falling into the category for
"artificial" parameters.

Other examples of languages with explicit object parameters are Python and Rust.

Recently Clang started emitting DW_AT_object_pointer for explicit
object parameters but decided not to mark them artificial [2][3].

## Overview

This proposal adjusts the wording in the DWARF spec to clarify that
explicit DW_AT_object_parameter's might not be marked
DW_AT_artificial.

## Proposed Changes

In chapter "5.7.8 Member Function Entries", change the mention of
`DW_AT_artificial` in the last sentence as follows:

[ORIGINAL TEXT]
>>>>>>>>>>>>>>>
If the member function entry describes a non-static member function,
then that entry has a DW_AT_object_pointer attribute whose value is a
reference to the formal parameter entry that corresponds to the object
for which the function is called. The name attribute of that formal
parameter is defined by the current language (for example, this for
C++ or self for Objective C and some other languages). That parameter
also has a DW_AT_artificial attribute whose value is true.
[NEW TEXT]
==========
If the member function entry describes a non-static member function,
then that entry has a DW_AT_object_pointer attribute whose value is a
reference to the formal parameter entry that corresponds to the object
for which the function is called. The name attribute of that formal
parameter is defined by the current language (for example, this for
C++ or self for Objective C and some other languages). Many languages
make the object pointer an implicit parameter with no syntax. In that
case the parameter should have a DW_AT_artificial attribute whose
value is true.
<<<<<<<<<<<<<<<

Alternatively we could just omit any mention of DW_AT_artificial. And
we might want to add some informative text about C++23's explicit
object parameters.

## References

* [1]: 
https://en.cppreference.com/w/cpp/language/member_functions#Explicit_object_member_functions
* [2]: https://github.com/llvm/llvm-project/pull/122897
* [3]: https://github.com/llvm/llvm-project/pull/122928
-- 
Dwarf-discuss mailing list
Dwarf-discuss@lists.dwarfstd.org
https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss

Reply via email to