aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-01-08 07:43:31 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-01-08 07:43:31 +0100
commit53290e072ae4d8e5d61f82d651b6fba309fed6f1 (patch)
tree9c330c06778ecd0226eeabc96443afbdd75b67e2
parent52ad5601bf56aba4d5da585c6a212ce3f6509af3 (diff)
downloadgcc-53290e072ae4d8e5d61f82d651b6fba309fed6f1.zip
gcc-53290e072ae4d8e5d61f82d651b6fba309fed6f1.tar.gz
gcc-53290e072ae4d8e5d61f82d651b6fba309fed6f1.tar.bz2
re PR c++/69145 (Bogus 'warning: #pragma implementation for ‘...’ appears after file is included')
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
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/ext/pr69145-1.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/pr69145-2-very-long-filename.cc3
-rw-r--r--gcc/testsuite/g++.dg/ext/pr69145-2.h3
-rw-r--r--libcpp/ChangeLog6
-rw-r--r--libcpp/files.c8
6 files changed, 28 insertions, 3 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5840815..aaee559 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..be0def7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr69145-1.C
@@ -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
index 0000000..dd68fe0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr69145-2-very-long-filename.cc
@@ -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
index 0000000..342aa85
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr69145-2.h
@@ -0,0 +1,3 @@
+#ifndef PR69145_2_H
+# define PR69145_2_H
+#endif
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 1151ad2..7845795 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -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.
diff --git a/libcpp/files.c b/libcpp/files.c
index 1952774..22b1d05 100644
--- a/libcpp/files.c
+++ b/libcpp/files.c
@@ -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))