[Bug c++/93093] New: __builtin_source_location reports values for default arguments not aligned with the Standard
phdofthehouse at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Dec 29 04:15:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93093
Bug ID: 93093
Summary: __builtin_source_location reports values for default
arguments not aligned with the Standard
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: phdofthehouse at gmail dot com
Target Milestone: ---
Consider the following example from the C++ Standard N4842 (nice website
version: eel.is/c++draft/support.srcloc#cons-4):
===========
struct s {
source_location member = source_location::current();
int other_member;
s(source_location loc = source_location::current())
: member(loc) // values of member refer to the location of the
calling function ([dcl.fct.default])
{}
s(int blather) : // values of member refer to this location
other_member(blather)
{}
s(double) // values of member refer to this location
{}
};
void f(source_location a = source_location::current()) {
source_location b = source_location::current(); // values in b refer to
this line
}
void g() {
f(); // f's first argument corresponds to this line of code
source_location c = source_location::current();
f(c); // f's first argument gets the same values as c, above
}
===========
When source_location is implemented with __builtin_source_location, code like
the above does not report those locations. s{}.member does not refer to the
calling location, s(2.0).member does not refer to the constructor declaration
s, and s(1).member does not refer to that location, and so forth.
Some talking on IRC revealed that this might be because of constant evaluation
/ constant folding, changing how the source location attribute behaves in
instances like these. This also affects the patch at
https://gcc.gnu.org/ml/gcc-patches/2019-12/msg01579.html whose tests fail in
both static_assert and regular runtime VERIFYs.
More information about the Gcc-bugs
mailing list