Commit a4cd9ac5 by Paolo Carlini Committed by Paolo Carlini

name-lookup.c (check_extern_c_conflict): Use DECL_SOURCE_LOCATION.

/cp
2019-09-25  Paolo Carlini  <paolo.carlini@oracle.com>

	* name-lookup.c (check_extern_c_conflict): Use DECL_SOURCE_LOCATION.
	(check_local_shadow): Use it in three additional places.

/testsuite
2019-09-25  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/diagnostic/redeclaration-1.C: New.
	* g++.dg/lookup/extern-c-hidden.C: Test location(s) too.
	* g++.dg/lookup/extern-c-redecl.C: Likewise.
	* g++.dg/lookup/extern-c-redecl6.C: Likewise.
	* g++.old-deja/g++.other/using9.C: Likewise.

From-SVN: r276119
parent 1ed0d9f8
2019-09-25 Paolo Carlini <paolo.carlini@oracle.com>
* name-lookup.c (check_extern_c_conflict): Use DECL_SOURCE_LOCATION.
(check_local_shadow): Use it in three additional places.
2019-09-24 Jason Merrill <jason@redhat.com> 2019-09-24 Jason Merrill <jason@redhat.com>
* parser.c (cp_parser_postfix_expression): Do set location of * parser.c (cp_parser_postfix_expression): Do set location of
......
...@@ -2549,12 +2549,12 @@ check_extern_c_conflict (tree decl) ...@@ -2549,12 +2549,12 @@ check_extern_c_conflict (tree decl)
if (mismatch) if (mismatch)
{ {
auto_diagnostic_group d; auto_diagnostic_group d;
pedwarn (input_location, 0, pedwarn (DECL_SOURCE_LOCATION (decl), 0,
"conflicting C language linkage declaration %q#D", decl); "conflicting C language linkage declaration %q#D", decl);
inform (DECL_SOURCE_LOCATION (old), inform (DECL_SOURCE_LOCATION (old),
"previous declaration %q#D", old); "previous declaration %q#D", old);
if (mismatch < 0) if (mismatch < 0)
inform (input_location, inform (DECL_SOURCE_LOCATION (decl),
"due to different exception specifications"); "due to different exception specifications");
} }
else else
...@@ -2674,7 +2674,8 @@ check_local_shadow (tree decl) ...@@ -2674,7 +2674,8 @@ check_local_shadow (tree decl)
/* ARM $8.3 */ /* ARM $8.3 */
if (b->kind == sk_function_parms) if (b->kind == sk_function_parms)
{ {
error ("declaration of %q#D shadows a parameter", decl); error_at (DECL_SOURCE_LOCATION (decl),
"declaration of %q#D shadows a parameter", decl);
return; return;
} }
} }
...@@ -2700,7 +2701,8 @@ check_local_shadow (tree decl) ...@@ -2700,7 +2701,8 @@ check_local_shadow (tree decl)
&& (old_scope->kind == sk_cond || old_scope->kind == sk_for)) && (old_scope->kind == sk_cond || old_scope->kind == sk_for))
{ {
auto_diagnostic_group d; auto_diagnostic_group d;
error ("redeclaration of %q#D", decl); error_at (DECL_SOURCE_LOCATION (decl),
"redeclaration of %q#D", decl);
inform (DECL_SOURCE_LOCATION (old), inform (DECL_SOURCE_LOCATION (old),
"%q#D previously declared here", old); "%q#D previously declared here", old);
return; return;
...@@ -2723,7 +2725,8 @@ check_local_shadow (tree decl) ...@@ -2723,7 +2725,8 @@ check_local_shadow (tree decl)
&& in_function_try_handler)) && in_function_try_handler))
{ {
auto_diagnostic_group d; auto_diagnostic_group d;
if (permerror (input_location, "redeclaration of %q#D", decl)) if (permerror (DECL_SOURCE_LOCATION (decl),
"redeclaration of %q#D", decl))
inform (DECL_SOURCE_LOCATION (old), inform (DECL_SOURCE_LOCATION (old),
"%q#D previously declared here", old); "%q#D previously declared here", old);
return; return;
......
2019-09-25 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/diagnostic/redeclaration-1.C: New.
* g++.dg/lookup/extern-c-hidden.C: Test location(s) too.
* g++.dg/lookup/extern-c-redecl.C: Likewise.
* g++.dg/lookup/extern-c-redecl6.C: Likewise.
* g++.old-deja/g++.other/using9.C: Likewise.
2019-09-23 Martin Sebor <msebor@redhat.com> 2019-09-23 Martin Sebor <msebor@redhat.com>
PR tree-optimization/91570 PR tree-optimization/91570
......
void
foo (int i)
{
int i // { dg-error "7:declaration of .int i. shadows a parameter" }
(0);
for (int j ;;) // { dg-message "12:.int j. previously declared here" }
int j // { dg-error "9:redeclaration of .int j." }
(0);
}
void
bar (int i) // { dg-message "10:.int i. previously declared here" }
try
{ }
catch (...)
{
int i // { dg-error "11:redeclaration of .int i." }
(0);
}
...@@ -4,8 +4,8 @@ extern "C" float fabsf (float); // { dg-message "previous declaration" } ...@@ -4,8 +4,8 @@ extern "C" float fabsf (float); // { dg-message "previous declaration" }
namespace Bob namespace Bob
{ {
extern "C" float fabsf (float, float); // { dg-error "C language" } extern "C" float fabsf (float, float); // { dg-error "20:conflicting C language" }
extern "C" double fabs (double, double); // { dg-message "previous declaration" } extern "C" double fabs (double, double); // { dg-message "previous declaration" }
} }
extern "C" double fabs (double); // { dg-error "C language" } extern "C" double fabs (double); // { dg-error "19:conflicting C language" }
...@@ -8,4 +8,4 @@ namespace A { ...@@ -8,4 +8,4 @@ namespace A {
// next line should trigger an error because // next line should trigger an error because
// it conflicts with previous declaration of foo_func (), due to // it conflicts with previous declaration of foo_func (), due to
// different exception specifications. // different exception specifications.
extern "C" void foo_func (); // { dg-error "C language linkage|exception specifications" } extern "C" void foo_func (); // { dg-error "17:conflicting C language linkage|exception specifications" }
...@@ -16,10 +16,10 @@ extern "C" { ...@@ -16,10 +16,10 @@ extern "C" {
namespace BAD namespace BAD
{ {
long i; // { dg-error "C language linkage" } long i; // { dg-error "10:conflicting C language linkage" }
double f; // { dg-error "C language linkage" } double f; // { dg-error "12:conflicting C language linkage" }
int fn (); // { dg-error "C language linkage" } int fn (); // { dg-error "9:conflicting C language linkage" }
int ai1[2]; // { dg-error "C language linkage" } int ai1[2]; // { dg-error "9:conflicting C language linkage" }
} }
} }
...@@ -16,6 +16,6 @@ using ::a; ...@@ -16,6 +16,6 @@ using ::a;
extern "C" void foo (); // { dg-message "previous declaration" } extern "C" void foo (); // { dg-message "previous declaration" }
namespace { namespace {
extern "C" int foo (); // { dg-error "C.*linkage" } extern "C" int foo (); // { dg-error "18:conflicting C.*linkage" }
using ::foo; // { dg-error "" } already in use using ::foo; // { dg-error "" } already in use
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment