+2018-11-27 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.
+
2018-11-27 Jakub Jelinek <jakub@redhat.com>
PR target/88188
--- /dev/null
+#pragma once
+#define LOCATION_OVERFLOW_TEST_PR83173_1_H
--- /dev/null
+#pragma once
+#define LOCATION_OVERFLOW_TEST_PR83173_2_H
--- /dev/null
+/*
+ { 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\"" } }
+*/
--- /dev/null
+#include "location-overflow-test-pr83173-1.h"
+#include "location-overflow-test-pr83173-2.h"
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:
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. */
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 } \