re PR c++/69145 (Bogus 'warning: #pragma implementation for ‘...’ appears after file...
authorJakub Jelinek <jakub@redhat.com>
Fri, 8 Jan 2016 06:43:31 +0000 (07:43 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 8 Jan 2016 06:43:31 +0000 (07:43 +0100)
PR c++/69145
* files.c (cpp_included_before): If IS_ADHOC_LOC (location), lookup
real location from the line_table.

* g++.dg/ext/pr69145-1.C: New test.
* g++.dg/ext/pr69145-2-very-long-filename.cc: New file.
* g++.dg/ext/pr69145-2.h: New file.

From-SVN: r232150

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/pr69145-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/pr69145-2-very-long-filename.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/pr69145-2.h [new file with mode: 0644]
libcpp/ChangeLog
libcpp/files.c

index 5840815..aaee559 100644 (file)
@@ -1,3 +1,10 @@
+2016-01-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/69145
+       * g++.dg/ext/pr69145-1.C: New test.
+       * g++.dg/ext/pr69145-2-very-long-filename.cc: New file.
+       * g++.dg/ext/pr69145-2.h: New file.
+
 2016-01-07  Martin Sebor  <msebor@redhat.com>
 
        PR c/68966
diff --git a/gcc/testsuite/g++.dg/ext/pr69145-1.C b/gcc/testsuite/g++.dg/ext/pr69145-1.C
new file mode 100644 (file)
index 0000000..be0def7
--- /dev/null
@@ -0,0 +1,4 @@
+// PR c++/69145
+// { dg-do compile }
+#pragma implementation "pr69145-2-very-long-filename.cc" // { dg-bogus "appears after file is included" }
+#include "pr69145-2-very-long-filename.cc"
diff --git a/gcc/testsuite/g++.dg/ext/pr69145-2-very-long-filename.cc b/gcc/testsuite/g++.dg/ext/pr69145-2-very-long-filename.cc
new file mode 100644 (file)
index 0000000..dd68fe0
--- /dev/null
@@ -0,0 +1,3 @@
+// PR c++/69145
+// { dg-do compile } */
+#include "pr69145-2.h"
diff --git a/gcc/testsuite/g++.dg/ext/pr69145-2.h b/gcc/testsuite/g++.dg/ext/pr69145-2.h
new file mode 100644 (file)
index 0000000..342aa85
--- /dev/null
@@ -0,0 +1,3 @@
+#ifndef PR69145_2_H
+# define PR69145_2_H
+#endif
index 1151ad2..7845795 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/69145
+       * files.c (cpp_included_before): If IS_ADHOC_LOC (location), lookup
+       real location from the line_table.
+
 2016-01-04  Jakub Jelinek  <jakub@redhat.com>
 
        Update copyright years.
index 1952774..22b1d05 100644 (file)
@@ -1224,10 +1224,12 @@ bool
 cpp_included_before (cpp_reader *pfile, const char *fname,
                     source_location location)
 {
-  struct cpp_file_hash_entry *entry;
+  struct cpp_file_hash_entry *entry
+    = (struct cpp_file_hash_entry *)
+      htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
 
-  entry = (struct cpp_file_hash_entry *)
-     htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
+  if (IS_ADHOC_LOC (location))
+    location = get_location_from_adhoc_loc (pfile->line_table, location);
 
   while (entry && (entry->start_dir == NULL || entry->u.file->err_no
                   || entry->location > location))