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:
parent
1ed0d9f8de
commit
a4cd9ac5f0
|
@ -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>
|
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)
|
||||||
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)
|
||||||
/* 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)
|
||||||
&& (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)
|
||||||
&& 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;
|
||||||
|
|
|
@ -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>
|
2019-09-23 Martin Sebor <msebor@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/91570
|
PR tree-optimization/91570
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
|
@ -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 {
|
||||||
// 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" {
|
||||||
|
|
||||||
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;
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue