Commit 1033ffa8 by Jakub Jelinek Committed by Jakub Jelinek

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
parent bdba2263
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.
......
......@@ -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 "
......
/* 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);
......
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
/* 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];
}
/* 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];
}
/* 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];
}
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