aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2017-06-09 20:57:38 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2017-06-09 20:57:38 +0000
commitb09649fdc609c79ea5acb9668636c7d8a5f64a7c (patch)
tree8ee5ecb323a5f1d30224c7950f593ad2f112c2f9 /gcc/testsuite
parentc5d6c6d94e74dd2f72e323ff01ad2506115ffe05 (diff)
downloadgcc-b09649fdc609c79ea5acb9668636c7d8a5f64a7c.zip
gcc-b09649fdc609c79ea5acb9668636c7d8a5f64a7c.tar.gz
gcc-b09649fdc609c79ea5acb9668636c7d8a5f64a7c.tar.bz2
Add support for mutually-incompatible fix-it hints
This patch adds a method: rich_location::fixits_cannot_be_auto_applied for ensuring that mutually-incompatible fix-its hints don't lead to insane output from -fdiagnostics-generate-patch. Fix-it hints within such rich_location instances are printed as normal by diagnostic_show_locus, but don't affect the output of -fdiagnostics-generate-patch. gcc/ChangeLog: * diagnostic.c (diagnostic_report_diagnostic): Only add fixits to the edit_context if they can be auto-applied. gcc/testsuite/ChangeLog: * gcc.dg/plugin/diagnostic-test-show-locus-bw.c (test_mutually_exclusive_suggestions): New test function. * gcc.dg/plugin/diagnostic-test-show-locus-generate-patch.c (test_mutually_exclusive_suggestions): New test function. * gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c (test_mutually_exclusive_suggestions): New test function. * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c (test_show_locus): Add special-case for "test_mutually_exclusive_suggestions". libcpp/ChangeLog: * include/line-map.h (rich_location::fixits_cannot_be_auto_applied): New method. (rich_location::fixits_can_be_auto_applied_p): New accessor. (rich_location::m_fixits_cannot_be_auto_applied): New field. * line-map.c (rich_location::rich_location): Initialize new field. From-SVN: r249081
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog12
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw.c20
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-generate-patch.c13
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c14
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c24
5 files changed, 83 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 05a5827..cc36d7a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,15 @@
+2017-06-09 David Malcolm <dmalcolm@redhat.com>
+
+ * gcc.dg/plugin/diagnostic-test-show-locus-bw.c
+ (test_mutually_exclusive_suggestions): New test function.
+ * gcc.dg/plugin/diagnostic-test-show-locus-generate-patch.c
+ (test_mutually_exclusive_suggestions): New test function.
+ * gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c
+ (test_mutually_exclusive_suggestions): New test function.
+ * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
+ (test_show_locus): Add special-case for
+ "test_mutually_exclusive_suggestions".
+
2017-06-09 Ian Lance Taylor <iant@golang.org>
* gcc.dg/tree-prof/split-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw.c
index 25b9d6c..100fa38 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw.c
@@ -269,3 +269,23 @@ void test_fixit_insert_newline (void)
{ dg-end-multiline-output "" } */
#endif
}
+
+/* Unit test for mutually-exclusive suggestions. */
+
+void test_mutually_exclusive_suggestions (void)
+{
+#if 0
+ original; /* { dg-warning "warning 1" } */
+/* { dg-warning "warning 2" "" { target *-*-* } .-1 } */
+/* { dg-begin-multiline-output "" }
+ original;
+ ^~~~~~~~
+ replacement_1
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ original;
+ ^~~~~~~~
+ replacement_2
+ { dg-end-multiline-output "" } */
+#endif
+}
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-generate-patch.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-generate-patch.c
index 4522dcd..f1963dd 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-generate-patch.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-generate-patch.c
@@ -51,6 +51,19 @@ void test_fixit_insert_newline (void)
#endif
}
+/* Unit test for mutually-exclusive suggestions. */
+
+void test_mutually_exclusive_suggestions (void)
+{
+#if 0
+ original; /* { dg-warning "warning 1" } */
+/* { dg-warning "warning 2" "" { target *-*-* } .-1 } */
+/* We should not print the mutually-incompatible fix-it hints within
+ the generated patch; they are not listed in the big expected
+ multiline output below. */
+#endif
+}
+
/* Verify the output from -fdiagnostics-generate-patch.
We expect a header, containing the filename. This is the absolute path,
so we can only capture it via regexps. */
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c
index 25a7c3c..16162ba 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c
@@ -55,3 +55,17 @@ void test_fixit_insert_newline (void)
/* { dg-regexp "fix-it:.*\\{52:1-52:1\\}:.*\\n" } */
#endif
}
+
+/* Unit test for mutually-exclusive suggestions. */
+
+void test_mutually_exclusive_suggestions (void)
+{
+#if 0
+ original; /* { dg-warning "warning 1" } */
+/* { dg-warning "warning 2" "" { target *-*-* } .-1 } */
+/* We should print the mutually-incompatible fix-it hints within
+ -fdiagnostics-parseable-fixits; verify that they are printed. */
+/* { dg-regexp "fix-it:.*\\{64:3-64:11}:.*\\n" } */
+/* { dg-regexp "fix-it:.*\\{64:3-64:11}:.*\\n" } */
+#endif
+}
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
index 6afb584..0a8eeba 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
@@ -306,6 +306,30 @@ test_show_locus (function *fun)
warning_at_rich_loc (&richloc, 0, "example of a replacement hint");
}
+ if (0 == strcmp (fnname, "test_mutually_exclusive_suggestions"))
+ {
+ const int line = fnstart_line + 2;
+ location_t start = get_loc (line, 2);
+ location_t finish = get_loc (line, 9);
+ source_range src_range;
+ src_range.m_start = start;
+ src_range.m_finish = finish;
+
+ {
+ rich_location richloc (line_table, make_location (start, start, finish));
+ richloc.add_fixit_replace (src_range, "replacement_1");
+ richloc.fixits_cannot_be_auto_applied ();
+ warning_at_rich_loc (&richloc, 0, "warning 1");
+ }
+
+ {
+ rich_location richloc (line_table, make_location (start, start, finish));
+ richloc.add_fixit_replace (src_range, "replacement_2");
+ richloc.fixits_cannot_be_auto_applied ();
+ warning_at_rich_loc (&richloc, 0, "warning 2");
+ }
+ }
+
/* Example of two carets where both carets appear to have an off-by-one
error appearing one column early.
Seen with gfortran.dg/associate_5.f03.