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:
parent
bdba22639b
commit
1033ffa8b3
@ -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.
|
||||
|
@ -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 "
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
145
gcc/testsuite/gcc.dg/inline-25.c
Normal file
145
gcc/testsuite/gcc.dg/inline-25.c
Normal 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];
|
||||
}
|
145
gcc/testsuite/gcc.dg/inline-26.c
Normal file
145
gcc/testsuite/gcc.dg/inline-26.c
Normal 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];
|
||||
}
|
145
gcc/testsuite/gcc.dg/inline-27.c
Normal file
145
gcc/testsuite/gcc.dg/inline-27.c
Normal 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];
|
||||
}
|
Loading…
Reference in New Issue
Block a user