mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-10 16:45:14 +08:00
Index: libiberty/ChangeLog
2007-05-04 Geoffrey Keating <geoffk@apple.com> * cp-demangle.c (d_name): Detect local-source-name. (d_prefix): Likewise. (d_unqualified_name): Implement local-source-name. Index: gcc/cp/ChangeLog 2007-05-04 Geoffrey Keating <geoffk@apple.com> PR 31775 * mangle.c (write_mangled_name): Mangle static variable names. (write_unqualified_name): Use local-source-name for namespace-scope static variables. Index: gcc/testsuite/ChangeLog 2007-05-04 Geoffrey Keating <geoffk@apple.com> PR 31775 * g++.dg/other/nested-extern.cc: New. * g++.dg/other/nested-extern-1.C: New. * g++.dg/other/nested-extern-2.C: New. From-SVN: r124467
This commit is contained in:
parent
fabfde2e51
commit
a2aa65f063
@ -1,3 +1,10 @@
|
||||
2007-05-05 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
PR 31775
|
||||
* mangle.c (write_mangled_name): Mangle static variable names.
|
||||
(write_unqualified_name): Use local-source-name for
|
||||
namespace-scope static variables.
|
||||
|
||||
2007-05-04 Dirk Mueller <dmueller@suse.de>
|
||||
|
||||
* cp-tree.h (DECL_MAIN_P): only if -ffreestanding is
|
||||
|
@ -688,7 +688,8 @@ write_mangled_name (const tree decl, bool top_level)
|
||||
}
|
||||
}
|
||||
else if (TREE_CODE (decl) == VAR_DECL
|
||||
/* The names of global variables aren't mangled. */
|
||||
/* The names of non-static global variables aren't mangled. */
|
||||
&& DECL_EXTERNAL_LINKAGE_P (decl)
|
||||
&& (CP_DECL_CONTEXT (decl) == global_namespace
|
||||
/* And neither are `extern "C"' variables. */
|
||||
|| DECL_EXTERN_C_P (decl)))
|
||||
@ -1086,7 +1087,10 @@ write_template_prefix (const tree node)
|
||||
|
||||
<unqualified-name> ::= <operator-name>
|
||||
::= <special-name>
|
||||
::= <source-name> */
|
||||
::= <source-name>
|
||||
::= <local-source-name>
|
||||
|
||||
<local-source-name> ::= L <source-name> <discriminator> */
|
||||
|
||||
static void
|
||||
write_unqualified_name (const tree decl)
|
||||
@ -1126,6 +1130,16 @@ write_unqualified_name (const tree decl)
|
||||
|
||||
write_string (oni[DECL_OVERLOADED_OPERATOR_P (decl)].mangled_name);
|
||||
}
|
||||
else if (VAR_OR_FUNCTION_DECL_P (decl) && ! TREE_PUBLIC (decl)
|
||||
&& DECL_NAMESPACE_SCOPE_P (decl)
|
||||
&& decl_linkage (decl) == lk_internal)
|
||||
{
|
||||
MANGLE_TRACE_TREE ("local-source-name", decl);
|
||||
write_char ('L');
|
||||
write_source_name (DECL_NAME (decl));
|
||||
/* The default discriminator is 1, and that's all we ever use,
|
||||
so there's no code to output one here. */
|
||||
}
|
||||
else
|
||||
write_source_name (DECL_NAME (decl));
|
||||
}
|
||||
|
@ -1,3 +1,10 @@
|
||||
2007-05-05 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
PR 31775
|
||||
* g++.dg/other/nested-extern.cc: New.
|
||||
* g++.dg/other/nested-extern-1.C: New.
|
||||
* g++.dg/other/nested-extern-2.C: New.
|
||||
|
||||
2007-05-04 Daniel Franke <franke.daniel@gmail.com>
|
||||
|
||||
PR fortran/31760
|
||||
|
17
gcc/testsuite/g++.dg/other/nested-extern-1.C
Normal file
17
gcc/testsuite/g++.dg/other/nested-extern-1.C
Normal file
@ -0,0 +1,17 @@
|
||||
/* { dg-do run } */
|
||||
// { dg-additional-sources "nested-extern.cc" }
|
||||
/* PR 31775 */
|
||||
extern "C" void abort();
|
||||
extern int *p;
|
||||
int main()
|
||||
{
|
||||
extern int i;
|
||||
i = 1;
|
||||
*p = 2;
|
||||
if (i == 2)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int i;
|
||||
int *p = &i;
|
18
gcc/testsuite/g++.dg/other/nested-extern-2.C
Normal file
18
gcc/testsuite/g++.dg/other/nested-extern-2.C
Normal file
@ -0,0 +1,18 @@
|
||||
/* { dg-do run } */
|
||||
// { dg-additional-sources "nested-extern.cc" }
|
||||
/* PR 31775 */
|
||||
extern "C" void abort();
|
||||
static int i;
|
||||
int *p = &i;
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
{
|
||||
extern int i;
|
||||
i = 1;
|
||||
*p = 2;
|
||||
if (i == 2)
|
||||
abort ();
|
||||
}
|
||||
return 0;
|
||||
}
|
1
gcc/testsuite/g++.dg/other/nested-extern.cc
Normal file
1
gcc/testsuite/g++.dg/other/nested-extern.cc
Normal file
@ -0,0 +1 @@
|
||||
int i;
|
@ -1,3 +1,9 @@
|
||||
2007-05-05 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* cp-demangle.c (d_name): Detect local-source-name.
|
||||
(d_prefix): Likewise.
|
||||
(d_unqualified_name): Implement local-source-name.
|
||||
|
||||
2007-05-03 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* filename_cmp.c: Replace include of ctype.h by include of
|
||||
|
@ -1100,6 +1100,9 @@ d_name (struct d_info *di)
|
||||
case 'Z':
|
||||
return d_local_name (di);
|
||||
|
||||
case 'L':
|
||||
return d_unqualified_name (di);
|
||||
|
||||
case 'S':
|
||||
{
|
||||
int subst;
|
||||
@ -1220,7 +1223,8 @@ d_prefix (struct d_info *di)
|
||||
if (IS_DIGIT (peek)
|
||||
|| IS_LOWER (peek)
|
||||
|| peek == 'C'
|
||||
|| peek == 'D')
|
||||
|| peek == 'D'
|
||||
|| peek == 'L')
|
||||
dc = d_unqualified_name (di);
|
||||
else if (peek == 'S')
|
||||
dc = d_substitution (di, 1);
|
||||
@ -1254,6 +1258,9 @@ d_prefix (struct d_info *di)
|
||||
/* <unqualified-name> ::= <operator-name>
|
||||
::= <ctor-dtor-name>
|
||||
::= <source-name>
|
||||
::= <local-source-name>
|
||||
|
||||
<local-source-name> ::= L <source-name> <discriminator>
|
||||
*/
|
||||
|
||||
static struct demangle_component *
|
||||
@ -1275,6 +1282,19 @@ d_unqualified_name (struct d_info *di)
|
||||
}
|
||||
else if (peek == 'C' || peek == 'D')
|
||||
return d_ctor_dtor_name (di);
|
||||
else if (peek == 'L')
|
||||
{
|
||||
struct demangle_component * ret;
|
||||
|
||||
d_advance (di, 1);
|
||||
|
||||
ret = d_source_name (di);
|
||||
if (ret == NULL)
|
||||
return NULL;
|
||||
if (! d_discriminator (di))
|
||||
return NULL;
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
@ -3842,3 +3842,19 @@ _ZNT
|
||||
--format=gnu-v3
|
||||
_Z1aMark
|
||||
_Z1aMark
|
||||
# <local-source-name> test 1
|
||||
--format=gnu-v3
|
||||
_ZL3foo_2
|
||||
foo
|
||||
# <local-source-name> test 2
|
||||
--format=gnu-v3
|
||||
_ZZL3foo_2vE4var1
|
||||
foo()::var1
|
||||
# <local-source-name> test 3
|
||||
--format=gnu-v3
|
||||
_ZZL3foo_2vE4var1_0
|
||||
foo()::var1
|
||||
# <local-source-name> test 4
|
||||
--format=gnu-v3
|
||||
_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct
|
||||
myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)
|
||||
|
Loading…
Reference in New Issue
Block a user