decl.c (maybe_commonize_var): Set DECL_UNINLINABLE for statics in inlines.

* decl.c (maybe_commonize_var): Set DECL_UNINLINABLE for statics
        in inlines.

From-SVN: r37394
This commit is contained in:
Jason Merrill 2000-11-11 18:50:20 -05:00
parent 8ee322c993
commit 492cca2489
4 changed files with 44 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2000-11-09 Jason Merrill <jason@redhat.com>
* decl.c (maybe_commonize_var): Set DECL_UNINLINABLE for statics
in inlines.
2000-11-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* decl.c (grokdeclarator, save_function_data): Use memcpy, not bcopy.
@ -28,10 +33,10 @@
2000-11-07 Eric Christopher <echristo@redhat.com>
* decl.c (init_decl_processing): Change definition of
__wchar_t to wchar_t. Remove artificial declaration of
wchar_t.
* lex.c: Change instances of __wchar_t to wchar_t.
* decl.c (init_decl_processing): Change definition of
__wchar_t to wchar_t. Remove artificial declaration of
wchar_t.
* lex.c: Change instances of __wchar_t to wchar_t.
2000-11-09 Nathan Sidwell <nathan@codesourcery.com>

View File

@ -7655,6 +7655,7 @@ maybe_commonize_var (decl)
inlining of such functions. */
current_function_cannot_inline
= "function with static variable cannot be inline";
DECL_UNINLINABLE (current_function_decl) = 1;
/* If flag_weak, we don't need to mess with this, as we can just
make the function weak, and let it refer to its unique local

View File

@ -0,0 +1,10 @@
inline int f ()
{
static int k;
return ++k;
}
int g ()
{
return f();
}

View File

@ -0,0 +1,24 @@
// Test that statics in inline functions are unified between
// translation units. Currently we handle this by just suppressing
// inling and relying on unification of the function itself.
// Special g++ Options: -O
// Additional sources: comdat1-aux.cc
inline int f ()
{
static int i;
return ++i;
}
int g ();
int main ()
{
if (f() != 1
|| g() != 2
|| f() != 3)
return 1;
return 0;
}