re PR c/35017 (PR11377 pedwarns even about valid code)

PR c/35017
	* c-decl.c (start_decl): Don't pedwarn about TREE_READONLY
	static decls.
	* c-typeck.c (build_external_ref): Don't pedwarn about
	static vars in current function's scope.

	* gcc.dg/inline-25.c: New test.
	* gcc.dg/inline-26.c: New test.
	* gcc.dg/inline-27.c: New test.

From-SVN: r131945
This commit is contained in:
Jakub Jelinek 2008-01-30 00:19:07 +01:00 committed by Jakub Jelinek
parent bdba22639b
commit 1033ffa8b3
7 changed files with 454 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2008-01-30 Jakub Jelinek <jakub@redhat.com>
PR c/35017
* c-decl.c (start_decl): Don't pedwarn about TREE_READONLY
static decls.
* c-typeck.c (build_external_ref): Don't pedwarn about
static vars in current function's scope.
2008-01-29 Joseph Myers <joseph@codesourcery.com>
* config.gcc (i[34567]86-*-nto-qnx*): Remove deprecation.

View File

@ -3320,6 +3320,7 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
if (TREE_CODE (decl) == VAR_DECL
&& current_scope != file_scope
&& TREE_STATIC (decl)
&& !TREE_READONLY (decl)
&& DECL_DECLARED_INLINE_P (current_function_decl)
&& DECL_EXTERNAL (current_function_decl))
pedwarn ("%q+D is static but declared in inline function %qD "

View File

@ -1,6 +1,6 @@
/* Build expressions with type checking for C compiler.
Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
This file is part of GCC.
@ -2234,7 +2234,8 @@ build_external_ref (tree id, int fun, location_t loc)
&& DECL_EXTERNAL (current_function_decl)
&& VAR_OR_FUNCTION_DECL_P (ref)
&& (TREE_CODE (ref) != VAR_DECL || TREE_STATIC (ref))
&& ! TREE_PUBLIC (ref))
&& ! TREE_PUBLIC (ref)
&& DECL_CONTEXT (ref) != current_function_decl)
pedwarn ("%H%qD is static but used in inline function %qD "
"which is not static", &loc, ref, current_function_decl);

View File

@ -1,3 +1,10 @@
2008-01-30 Jakub Jelinek <jakub@redhat.com>
PR c/35017
* gcc.dg/inline-25.c: New test.
* gcc.dg/inline-26.c: New test.
* gcc.dg/inline-27.c: New test.
2008-01-29 Richard Guenther <rguenther@suse.de>
PR middle-end/35006

View File

@ -0,0 +1,145 @@
/* PR c/35017 */
/* { dg-do compile } */
/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
static int a = 6;
static const int b = 6;
int c = 6;
inline int
fn1 (void)
{
return a; /* { dg-error "used in inline" } */
}
inline int
fn2 (void)
{
return b; /* { dg-error "used in inline" } */
}
inline int
fn3 (void)
{
return c;
}
inline int
fn4 (void)
{
static int d = 6; /* { dg-error "declared in inline" } */
return d;
}
inline int
fn5 (void)
{
static const int e = 6;
return e;
}
inline int
fn6 (void)
{
int f = 6;
return f;
}
inline int
fn7 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}
extern inline int
fn8 (void)
{
return a;
}
extern inline int
fn9 (void)
{
return b;
}
extern inline int
fn10 (void)
{
return c;
}
extern inline int
fn11 (void)
{
static int d = 6;
return d;
}
extern inline int
fn12 (void)
{
static const int e = 6;
return e;
}
extern inline int
fn13 (void)
{
int f = 6;
return f;
}
extern inline int
fn14 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}
static inline int
fn15 (void)
{
return a;
}
static inline int
fn16 (void)
{
return b;
}
static inline int
fn17 (void)
{
return c;
}
static inline int
fn18 (void)
{
static int d = 6;
return d;
}
static inline int
fn19 (void)
{
static const int e = 6;
return e;
}
static inline int
fn20 (void)
{
int f = 6;
return f;
}
static inline int
fn21 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}

View File

@ -0,0 +1,145 @@
/* PR c/35017 */
/* { dg-do compile } */
/* { dg-options "-std=gnu99" } */
static int a = 6;
static const int b = 6;
int c = 6;
inline int
fn1 (void)
{
return a; /* { dg-warning "used in inline" } */
}
inline int
fn2 (void)
{
return b; /* { dg-warning "used in inline" } */
}
inline int
fn3 (void)
{
return c;
}
inline int
fn4 (void)
{
static int d = 6; /* { dg-warning "declared in inline" } */
return d;
}
inline int
fn5 (void)
{
static const int e = 6;
return e;
}
inline int
fn6 (void)
{
int f = 6;
return f;
}
inline int
fn7 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}
extern inline int
fn8 (void)
{
return a;
}
extern inline int
fn9 (void)
{
return b;
}
extern inline int
fn10 (void)
{
return c;
}
extern inline int
fn11 (void)
{
static int d = 6;
return d;
}
extern inline int
fn12 (void)
{
static const int e = 6;
return e;
}
extern inline int
fn13 (void)
{
int f = 6;
return f;
}
extern inline int
fn14 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}
static inline int
fn15 (void)
{
return a;
}
static inline int
fn16 (void)
{
return b;
}
static inline int
fn17 (void)
{
return c;
}
static inline int
fn18 (void)
{
static int d = 6;
return d;
}
static inline int
fn19 (void)
{
static const int e = 6;
return e;
}
static inline int
fn20 (void)
{
int f = 6;
return f;
}
static inline int
fn21 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}

View File

@ -0,0 +1,145 @@
/* PR c/35017 */
/* { dg-do compile } */
/* { dg-options "-std=gnu89" } */
static int a = 6;
static const int b = 6;
int c = 6;
inline int
fn1 (void)
{
return a;
}
inline int
fn2 (void)
{
return b;
}
inline int
fn3 (void)
{
return c;
}
inline int
fn4 (void)
{
static int d = 6;
return d;
}
inline int
fn5 (void)
{
static const int e = 6;
return e;
}
inline int
fn6 (void)
{
int f = 6;
return f;
}
inline int
fn7 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}
extern inline int
fn8 (void)
{
return a; /* { dg-warning "used in inline" } */
}
extern inline int
fn9 (void)
{
return b; /* { dg-warning "used in inline" } */
}
extern inline int
fn10 (void)
{
return c;
}
extern inline int
fn11 (void)
{
static int d = 6; /* { dg-warning "declared in inline" } */
return d;
}
extern inline int
fn12 (void)
{
static const int e = 6;
return e;
}
extern inline int
fn13 (void)
{
int f = 6;
return f;
}
extern inline int
fn14 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}
static inline int
fn15 (void)
{
return a;
}
static inline int
fn16 (void)
{
return b;
}
static inline int
fn17 (void)
{
return c;
}
static inline int
fn18 (void)
{
static int d = 6;
return d;
}
static inline int
fn19 (void)
{
static const int e = 6;
return e;
}
static inline int
fn20 (void)
{
int f = 6;
return f;
}
static inline int
fn21 (int i)
{
static const char g[10] = "abcdefghij";
return g[i];
}