Preserve the location of explicitly defaulted functions.
authorJason Merrill <jason@redhat.com>
Fri, 11 Oct 2019 18:55:14 +0000 (14:55 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 11 Oct 2019 18:55:14 +0000 (14:55 -0400)
* 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
gcc/cp/decl2.c
gcc/cp/method.c

index 95f683103e07f4ad315f7fba448d0dfffcd8432e..a925f7e0ca3c6d99ccbd2b59479e777b281b47dd 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-11  Jason Merrill  <jason@redhat.com>
+
+       * decl2.c (mark_used): Don't clobber DECL_SOURCE_LOCATION on
+       explicitly defaulted functions.
+       * method.c (synthesize_method): Likewise.
+
 2019-10-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/91987
index ee198cdf5ce5f8c36e3856432e17187b981944f9..6d5e973b4874d87e1512550364788d2b4e487d13 100644 (file)
@@ -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
index 01bf534aef276b308035a322b49bcf3697eee4f2..73a01147ff9b0193d2d80dd63347ef774c66846f 100644 (file)
@@ -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