From e0365bd388bac7641e1767222b9ddc683dbf057a Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 11 Oct 2019 14:55:14 -0400 Subject: [PATCH] Preserve the location of explicitly defaulted functions. * decl2.c (mark_used): Don't clobber DECL_SOURCE_LOCATION on explicitly defaulted functions. * method.c (synthesize_method): Likewise. From-SVN: r276902 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl2.c | 3 ++- gcc/cp/method.c | 7 ++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 95f683103e0..a925f7e0ca3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-10-11 Jason Merrill + + * decl2.c (mark_used): Don't clobber DECL_SOURCE_LOCATION on + explicitly defaulted functions. + * method.c (synthesize_method): Likewise. + 2019-10-11 Jakub Jelinek PR c++/91987 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index ee198cdf5ce..6d5e973b487 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -5588,7 +5588,8 @@ mark_used (tree decl, tsubst_flags_t complain) /* Remember the current location for a function we will end up synthesizing. Then we can inform the user where it was required in the case of error. */ - DECL_SOURCE_LOCATION (decl) = input_location; + if (DECL_ARTIFICIAL (decl)) + DECL_SOURCE_LOCATION (decl) = input_location; /* Synthesizing an implicitly defined member function will result in garbage collection. We must treat this situation as if we were diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 01bf534aef2..73a01147ff9 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -892,7 +892,7 @@ synthesize_method (tree fndecl) /* Reset the source location, we might have been previously deferred, and thus have saved where we were first needed. */ - if (!DECL_INHERITED_CTOR (fndecl)) + if (DECL_ARTIFICIAL (fndecl) && !DECL_INHERITED_CTOR (fndecl)) DECL_SOURCE_LOCATION (fndecl) = DECL_SOURCE_LOCATION (TYPE_NAME (DECL_CONTEXT (fndecl))); @@ -953,8 +953,9 @@ synthesize_method (tree fndecl) pop_deferring_access_checks (); if (error_count != errorcount || warning_count != warningcount + werrorcount) - inform (input_location, "synthesized method %qD first required here", - fndecl); + if (DECL_ARTIFICIAL (fndecl)) + inform (input_location, "synthesized method %qD first required here", + fndecl); } /* Build a reference to type TYPE with cv-quals QUALS, which is an -- 2.30.2