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>
* parser.c (cp_parser_postfix_expression): Do set location of
......
......@@ -2549,12 +2549,12 @@ check_extern_c_conflict (tree decl)
if (mismatch)
{
auto_diagnostic_group d;
pedwarn (input_location, 0,
pedwarn (DECL_SOURCE_LOCATION (decl), 0,
"conflicting C language linkage declaration %q#D", decl);
inform (DECL_SOURCE_LOCATION (old),
"previous declaration %q#D", old);
if (mismatch < 0)
inform (input_location,
inform (DECL_SOURCE_LOCATION (decl),
"due to different exception specifications");
}
else
......@@ -2674,7 +2674,8 @@ check_local_shadow (tree decl)
/* ARM $8.3 */
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;
}
}
......@@ -2700,7 +2701,8 @@ check_local_shadow (tree decl)
&& (old_scope->kind == sk_cond || old_scope->kind == sk_for))
{
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),
"%q#D previously declared here", old);
return;
......@@ -2723,7 +2725,8 @@ check_local_shadow (tree decl)
&& in_function_try_handler))
{
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),
"%q#D previously declared here", old);
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>
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" }
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); // { dg-error "C language" }
extern "C" double fabs (double); // { dg-error "19:conflicting C language" }
......@@ -8,4 +8,4 @@ namespace A {
// next line should trigger an error because
// it conflicts with previous declaration of foo_func (), due to
// 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" {
namespace BAD
{
long i; // { dg-error "C language linkage" }
double f; // { dg-error "C language linkage" }
int fn (); // { dg-error "C language linkage" }
int ai1[2]; // { dg-error "C language linkage" }
long i; // { dg-error "10:conflicting C language linkage" }
double f; // { dg-error "12:conflicting C language linkage" }
int fn (); // { dg-error "9:conflicting C language linkage" }
int ai1[2]; // { dg-error "9:conflicting C language linkage" }
}
}
......@@ -16,6 +16,6 @@ using ::a;
extern "C" void foo (); // { dg-message "previous declaration" }
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
}
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