* rtti.c (build_x_typeid): Check rtti is enabled.
authorNathan Sidwell <nathan@acm.org>
Tue, 27 Apr 1999 09:41:33 +0000 (09:41 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 27 Apr 1999 09:41:33 +0000 (09:41 +0000)
From-SVN: r26675

gcc/cp/ChangeLog
gcc/cp/rtti.c
gcc/testsuite/g++.old-deja/g++.other/rtti5.C [new file with mode: 0644]

index 3124a49a6dcda39b3b4cda77fb31e7ec0ebcc684..2d6e496d90df07c0556285a21467b8232715e6ac 100644 (file)
@@ -1,3 +1,7 @@
+1999-04-27  Nathan Sidwell  <nathan@acm.org>
+
+       * rtti.c (build_x_typeid): Check rtti is enabled.
+
 1999-04-26  Mark Mitchell  <mark@codesourcery.com>
 
        * search.c (is_subobject_of_p): Make sure we're looking at the
index 79fb8006ce885e45303ffd2dceb0cad5e73d8007..e0ce5cd8666661d75b2b60e402322ee8aee3c627 100644 (file)
@@ -261,9 +261,15 @@ build_x_typeid (exp)
      tree exp;
 {
   tree cond = NULL_TREE;
-  tree type = TREE_TYPE (tinfo_fn_type);
+  tree type;
   int nonnull;
 
+  if (! flag_rtti)
+    {
+      error ("cannot use typeid with -fno-rtti");
+      return error_mark_node;
+    }
+  
   if (TYPE_SIZE (type_info_type_node) == NULL_TREE)
     {
       error ("must #include <typeinfo> before using typeid");
@@ -288,6 +294,7 @@ build_x_typeid (exp)
   if (exp == error_mark_node)
     return error_mark_node;
 
+  type = TREE_TYPE (tinfo_fn_type);
   exp = build_call (exp, type, NULL_TREE);
 
   if (cond)
diff --git a/gcc/testsuite/g++.old-deja/g++.other/rtti5.C b/gcc/testsuite/g++.old-deja/g++.other/rtti5.C
new file mode 100644 (file)
index 0000000..38a5146
--- /dev/null
@@ -0,0 +1,14 @@
+// Build don't link:
+// Special g++ Options: -fno-rtti
+
+// Copyright (C) 1999 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 9 Apr 1999 <nathan@acm.org>
+// derrived from bug report from Alexander Zvyagin <zvyagin@mx.ihep.su>
+
+// check we don't die with disabled rtti
+
+
+int main(void) {
+  int i;
+  typeid(i); // ERROR - rtti disabled
+}