aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2012-05-09 21:14:15 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2012-05-09 21:14:15 +0000
commit1b8b126f386ffff12b02f7c9cb2a00c38996f1ea (patch)
tree4b18ba8c78c4acdb7b3108123cdc3146cde30ec1 /gcc
parentd21a7b447a2bdf5fe11f70827327c46472ee081a (diff)
downloadgcc-1b8b126f386ffff12b02f7c9cb2a00c38996f1ea.zip
gcc-1b8b126f386ffff12b02f7c9cb2a00c38996f1ea.tar.gz
gcc-1b8b126f386ffff12b02f7c9cb2a00c38996f1ea.tar.bz2
re PR c++/53289 (unnecessary repetition of caret diagnostics)
2012-05-09 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/53289 gcc/ * diagnostic.h (diagnostic_context): Add last_location. * diagnostic.c (diagnostic_initialize): Initialize it. (diagnostic_show_locus): Use it. From-SVN: r187355
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/diagnostic.c5
-rw-r--r--gcc/diagnostic.h3
3 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bd8b9b2..40ff5a1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -12,6 +12,13 @@
2012-05-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
+ PR c++/53289
+ * diagnostic.h (diagnostic_context): Add last_location.
+ * diagnostic.c (diagnostic_initialize): Initialize it.
+ (diagnostic_show_locus): Use it.
+
+2012-05-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
* doc/extend.texi (Function Attributes): Point xref to section
about Pragmas.
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 1e2712e..4913eed 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -147,6 +147,7 @@ diagnostic_initialize (diagnostic_context *context, int n_opts)
context->option_enabled = NULL;
context->option_state = NULL;
context->option_name = NULL;
+ context->last_location = UNKNOWN_LOCATION;
context->last_module = 0;
context->x_data = NULL;
context->lock = 0;
@@ -263,9 +264,11 @@ diagnostic_show_locus (diagnostic_context * context,
if (!context->show_caret
- || diagnostic->location <= BUILTINS_LOCATION)
+ || diagnostic->location <= BUILTINS_LOCATION
+ || diagnostic->location == context->last_location)
return;
+ context->last_location = diagnostic->location;
s = expand_location_to_spelling_point (diagnostic->location);
line = location_get_source_line (s);
if (line == NULL)
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 63eb385..976754e 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -172,6 +172,9 @@ struct diagnostic_context
/* Auxiliary data for client. */
void *x_data;
+ /* Used to detect that the last caret was printed at the same location. */
+ location_t last_location;
+
/* Used to detect when the input file stack has changed since last
described. */
const struct line_map *last_module;