This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH v3 2/3] PR preprocessor/83173: New test
- From: Mike Gulick <mgulick at mathworks dot com>
- To: <gcc-patches at gcc dot gnu dot org>
- Cc: David Malcolm <dmalcolm at redhat dot com>, Mike Gulick <mgulick at mathworks dot com>
- Date: Thu, 1 Nov 2018 11:56:06 -0400
- Subject: [PATCH v3 2/3] PR preprocessor/83173: New test
- References: <7d281f10-a4e0-d81e-c405-d77ceda86f5b@mathworks.com> <20181101155607.11388-1-mgulick@mathworks.com>
2018-10-31 Mike Gulick <mgulick@mathworks.com>
PR preprocessor/83173
* gcc.dg/plugin/location-overflow-test-pr83173.c: New test.
* gcc.dg/plugin/location-overflow-test-pr83173.h: Header for
pr83173.c.
* gcc.dg/plugin/location-overflow-test-pr83173-1.h: Header for
pr83173.c.
* gcc.dg/plugin/location-overflow-test-pr83173-2.h: Header for
pr83173.c.
* gcc.dg/plugin/location_overflow_plugin.c: Use PLUGIN_PRAGMAS
instead of PLUGIN_START_UNIT.
* gcc.dg/plugin/plugin.exp: Enable new test.
---
.../plugin/location-overflow-test-pr83173-1.h | 2 ++
.../plugin/location-overflow-test-pr83173-2.h | 2 ++
.../plugin/location-overflow-test-pr83173.c | 21 +++++++++++++++++++
.../plugin/location-overflow-test-pr83173.h | 2 ++
.../gcc.dg/plugin/location_overflow_plugin.c | 13 +++++++-----
gcc/testsuite/gcc.dg/plugin/plugin.exp | 3 ++-
6 files changed, 37 insertions(+), 6 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-1.h
create mode 100644 gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-2.h
create mode 100644 gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.c
create mode 100644 gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.h
diff --git a/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-1.h b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-1.h
new file mode 100644
index 00000000000..f47dc3643c2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-1.h
@@ -0,0 +1,2 @@
+#pragma once
+#define LOCATION_OVERFLOW_TEST_PR83173_1_H
diff --git a/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-2.h b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-2.h
new file mode 100644
index 00000000000..bc23ed2a188
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173-2.h
@@ -0,0 +1,2 @@
+#pragma once
+#define LOCATION_OVERFLOW_TEST_PR83173_2_H
diff --git a/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.c b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.c
new file mode 100644
index 00000000000..2d581283474
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.c
@@ -0,0 +1,21 @@
+/*
+ { dg-options "-fplugin-arg-location_overflow_plugin-value=0x60000001" }
+ { dg-do preprocess }
+*/
+
+#include "location-overflow-test-pr83173.h"
+
+int
+main ()
+{
+ return 0;
+}
+
+/*
+ The preprocessor output should contain
+ '# 1 "path/to/location-overflow-test-pr83173-1.h" 1', but should not
+ contain any other references to location-overflow-test-pr83183-1.h.
+
+ { dg-final { scan-file location-overflow-test-pr83173.i "# 1 \[^\r\n\]+location-overflow-test-pr83173-1\.h\" 1" } }
+ { dg-final { scan-file-not location-overflow-test-pr83173.i "# (?!1 \[^\r\n\]+location-overflow-test-pr83173-1\.h\" 1)\[0-9\]+ \[^\r\n\]+location-overflow-test-pr83173-1\.h\"" } }
+*/
diff --git a/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.h b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.h
new file mode 100644
index 00000000000..49076f7ea3c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-pr83173.h
@@ -0,0 +1,2 @@
+#include "location-overflow-test-pr83173-1.h"
+#include "location-overflow-test-pr83173-2.h"
diff --git a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.c b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.c
index 3644d9fd82e..317232bc19d 100644
--- a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.c
+++ b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.c
@@ -12,11 +12,14 @@ int plugin_is_GPL_compatible;
static location_t base_location;
-/* Callback handler for the PLUGIN_START_UNIT event; pretend
- we parsed a very large include file. */
+/* Callback handler for the PLUGIN_PRAGMAS event; pretend we parsed a
+ very large include file. This is used to set the initial line table
+ offset for the preprocessor, to make it appear as if we had parsed a
+ very large file. PRAGMA_START_UNIT is not suitable here as is not
+ invoked during the preprocessor stage. */
static void
-on_start_unit (void */*gcc_data*/, void */*user_data*/)
+on_pragma_registration (void */*gcc_data*/, void */*user_data*/)
{
/* Act as if we've already parsed a large body of code;
so that we can simulate various fallbacks in libcpp:
@@ -79,8 +82,8 @@ plugin_init (struct plugin_name_args *plugin_info,
error_at (UNKNOWN_LOCATION, "missing plugin argument");
register_callback (plugin_info->base_name,
- PLUGIN_START_UNIT,
- on_start_unit,
+ PLUGIN_PRAGMAS,
+ on_pragma_registration,
NULL); /* void *user_data */
/* Hack in additional testing, based on the exact value supplied. */
diff --git a/gcc/testsuite/gcc.dg/plugin/plugin.exp b/gcc/testsuite/gcc.dg/plugin/plugin.exp
index d92ede79c0d..f9e89c48140 100644
--- a/gcc/testsuite/gcc.dg/plugin/plugin.exp
+++ b/gcc/testsuite/gcc.dg/plugin/plugin.exp
@@ -96,7 +96,8 @@ set plugin_test_list [list \
diagnostic-test-inlining-4.c } \
{ location_overflow_plugin.c \
location-overflow-test-1.c \
- location-overflow-test-2.c } \
+ location-overflow-test-2.c \
+ location-overflow-test-pr83173.c } \
{ must_tail_call_plugin.c \
must-tail-call-1.c \
must-tail-call-2.c } \
--
2.19.1