re PR libstdc++/34680 (Unconditional use of dynamic_cast in locale_facets.tcc breaks...
authorPaolo Carlini <pcarlini@suse.de>
Sun, 6 Jan 2008 22:30:32 +0000 (22:30 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sun, 6 Jan 2008 22:30:32 +0000 (22:30 +0000)
gcc/
2008-01-06  Paolo Carlini  <pcarlini@suse.de>

PR libstdc++/34680
* c-cppbuiltin.c (c_cpp_builtins): Define __GXX_RTTI, if appropriate.
* doc/cpp.texi ([Common Predefined Macros]): Document.

gcc/testsuite/
2008-01-06  Paolo Carlini  <pcarlini@suse.de>

PR libstdc++/34680
* g++.dg/rtti/predefined-rtti-macro-1.C: New.
* g++.dg/rtti/predefined-rtti-macro-2.C: Likewise.

From-SVN: r131366

gcc/ChangeLog
gcc/c-cppbuiltin.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/rtti/predefined-rtti-macro-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/rtti/predefined-rtti-macro-2.C [new file with mode: 0644]

index 4561dba458afb46348d3bde92daf3e6cfc260bbb..027769555481f95337f314b6ece7334f43215e4f 100644 (file)
@@ -1,3 +1,9 @@
+2008-01-06  Paolo Carlini  <pcarlini@suse.de>
+
+       PR libstdc++/34680
+       * c-cppbuiltin.c (c_cpp_builtins): Define __GXX_RTTI, if appropriate.
+       * doc/cpp.texi ([Common Predefined Macros]): Document.
+
 2008-01-06  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.c (ix86_emit_swsqrtsf): Use negative constants in
index e201b058f5f2d7f6eee794c360b237c9c727d163..86c3f9cfff251e285db90b36257b7ab6218bc6c0 100644 (file)
@@ -449,6 +449,8 @@ c_cpp_builtins (cpp_reader *pfile)
        cpp_define (pfile, "__GXX_WEAK__=0");
       if (warn_deprecated)
        cpp_define (pfile, "__DEPRECATED");
+      if (flag_rtti)
+       cpp_define (pfile, "__GXX_RTTI");
       if (cxx_dialect == cxx0x)
         cpp_define (pfile, "__GXX_EXPERIMENTAL_CXX0X__");
     }
index d66912b2ac2aff2f2895c51eef6393cb55fe52d3..0a0db6b7b657d78f61ca8d4b9b68a3f7aff78f94 100644 (file)
@@ -1,3 +1,9 @@
+2008-01-06  Paolo Carlini  <pcarlini@suse.de>
+
+       PR libstdc++/34680
+       * g++.dg/rtti/predefined-rtti-macro-1.C: New.
+       * g++.dg/rtti/predefined-rtti-macro-2.C: Likewise.
+
 2008-01-06  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/34545
diff --git a/gcc/testsuite/g++.dg/rtti/predefined-rtti-macro-1.C b/gcc/testsuite/g++.dg/rtti/predefined-rtti-macro-1.C
new file mode 100644 (file)
index 0000000..5c94bc1
--- /dev/null
@@ -0,0 +1,12 @@
+// { dg-do compile }
+
+struct A { virtual ~A() { }; };
+struct B : A { };
+
+void f(B* bp)
+{
+  bp =
+#ifdef __GXX_RTTI
+  dynamic_cast<B*>(static_cast<A*>(0));
+#endif
+}
diff --git a/gcc/testsuite/g++.dg/rtti/predefined-rtti-macro-2.C b/gcc/testsuite/g++.dg/rtti/predefined-rtti-macro-2.C
new file mode 100644 (file)
index 0000000..284f2f6
--- /dev/null
@@ -0,0 +1,12 @@
+// { dg-do compile }
+// { dg-options "-fno-rtti" }
+
+struct B { };
+
+void f(B* bp)
+{
+  bp =
+#ifndef __GXX_RTTI
+  static_cast<B*>(0);
+#endif
+}