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
This commit is contained in:
Paolo Carlini 2019-09-25 08:50:29 +00:00 committed by Paolo Carlini
parent 1ed0d9f8de
commit a4cd9ac5f0
8 changed files with 49 additions and 13 deletions

View File

@ -1,3 +1,8 @@
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

View File

@ -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;

View File

@ -1,3 +1,11 @@
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

View File

@ -0,0 +1,20 @@
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);
}

View File

@ -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" }

View File

@ -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" }

View File

@ -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" }
}
}

View File

@ -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
}