re PR c++/14962 (g++ ignores #pragma redefine_extname)
authorEric Botcazou <ebotcazou@libertysurf.fr>
Fri, 7 May 2004 06:58:00 +0000 (08:58 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 7 May 2004 06:58:00 +0000 (06:58 +0000)
PR c++/14962
* c-pragma.c (handle_pragma_redefine_extname): Only change
the assembler name of FUNCTION_DECLs and VAR_DECLs.

From-SVN: r81610

gcc/ChangeLog
gcc/c-pragma.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/pragma-re-2.C [new file with mode: 0644]

index dacb3ca5d456620a97bf09e44c4ade8a160680a3..edad48cad9db0da84296a53e0f5b578a796e5508 100644 (file)
@@ -1,3 +1,9 @@
+2004-05-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR c++/14962
+       * c-pragma.c (handle_pragma_redefine_extname): Only change
+       the assembler name of FUNCTION_DECLs and VAR_DECLs.
+
 2004-05-07  Uros Bizjak  <uros@kss-loka.si>
 
        * optabs.h (enum optab_index): Add new OTI_log1p.
index c9e15056e78f0b3c2a29545476499c45cfa0db39..10c8caea35d9252605985891ea5f8b418152dd87 100644 (file)
@@ -377,7 +377,8 @@ handle_pragma_redefine_extname (cpp_reader *dummy ATTRIBUTE_UNUSED)
     warning ("junk at end of #pragma redefine_extname");
 
   decl = identifier_global_value (oldname);
-  if (decl && TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
+  if (decl && (TREE_CODE (decl) == FUNCTION_DECL
+              || TREE_CODE (decl) == VAR_DECL))
     {
       if (DECL_ASSEMBLER_NAME_SET_P (decl)
          && DECL_ASSEMBLER_NAME (decl) != newname)
index 2f569390496fd5225d92e3a5b73e522f56d89424..cb5a6b8fa80810094e32b7ef88d3af553d02612c 100644 (file)
@@ -1,3 +1,7 @@
+2004-05-07  Eric Botcazou <ebotcazou@libertysurf.fr>
+
+       * g++.dg/other/pragma-re-2.C: New test.
+
 2004-05-07  Uros Bizjak  <uros@kss-loka.si>
 
        * gcc.dg/i386-387-1.c: Add new test for __builtin_fmod.
diff --git a/gcc/testsuite/g++.dg/other/pragma-re-2.C b/gcc/testsuite/g++.dg/other/pragma-re-2.C
new file mode 100644 (file)
index 0000000..44d1b50
--- /dev/null
@@ -0,0 +1,25 @@
+/* PR c++/14962 */
+/* Originator: <phil@fsel.com> */
+
+/* { dg-do compile { target *-*-solaris* } } */
+/* { dg-final { scan-assembler "new_name" } } */
+/* { dg-final { scan-assembler-not "old_name" } } */
+
+#ifndef __PRAGMA_REDEFINE_EXTNAME
+#error 
+#endif
+
+extern "C" {
+
+struct old_name { int i; };
+
+#pragma redefine_extname old_name new_name
+
+int old_name(void);
+
+}
+
+int foo(void)
+{
+  return old_name();
+}