* gdb.cp/cplusfuncs.cc (class foo): Add operators
authorKeith Seitz <keiths@redhat.com>
Wed, 11 Nov 2009 16:45:16 +0000 (16:45 +0000)
committerKeith Seitz <keiths@redhat.com>
Wed, 11 Nov 2009 16:45:16 +0000 (16:45 +0000)
new[] and delete[].
* gdb.cp/cplusfuncs.exp (dm_type_void): Change to
"void".
(probe_demangler): Remove all single-quoting of
method and variable names.
(info_func_regexp): Remove the word "void" from any
occurrence of "(void)".
(print_addr_2): Remove all single-quoting of
method names.
(print_addr_2_kfail): Likewise.
(print_addr): Single-quote C function names before
passing to print_addr_2.
(test_paddr_operator_functions): Remove single-quoting
for method names.
Add tests for operator new[] and operator delete[].

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/cplusfuncs.cc
gdb/testsuite/gdb.cp/cplusfuncs.exp

index b89a23e70204dce6d1cc03472dda9e59c2f4f820..44a67f012bebe72ac03ba59c27a3e17d0657ab06 100644 (file)
@@ -1,3 +1,22 @@
+2009-11-11  Keith Seitz  <keiths@redhat.com>
+
+       * gdb.cp/cplusfuncs.cc (class foo): Add operators
+       new[] and delete[].
+       * gdb.cp/cplusfuncs.exp (dm_type_void): Change to
+       "void".
+       (probe_demangler): Remove all single-quoting of
+       method and variable names.
+       (info_func_regexp): Remove the word "void" from any
+       occurrence of "(void)".
+       (print_addr_2): Remove all single-quoting of
+       method names.
+       (print_addr_2_kfail): Likewise.
+       (print_addr): Single-quote C function names before
+       passing to print_addr_2.
+       (test_paddr_operator_functions): Remove single-quoting
+       for method names.
+       Add tests for operator new[] and operator delete[].
+
 2009-11-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * gdb.dwarf2/dw2-ranges.exp: Call runto_main.
index 7f033d6d90c6f8b9ac7568439cf96c378e841a27..f4f78a626e1088e539f0f7859a845548704a4b6e 100644 (file)
@@ -46,7 +46,9 @@ public:
   void  operator []     (foo&);
   void  operator ()     (foo&);
   void* operator new    (size_t) throw ();
+  void* operator new[]  (size_t) throw ();
   void  operator delete (void *);
+  void  operator delete[] (void *);
   /**/  operator int    ();
   /**/  operator char*  ();
 
@@ -115,7 +117,9 @@ void  foo::operator ->*    (foo& afoo) { afoo.ifoo = 0; }
 void  foo::operator []     (foo& afoo) { afoo.ifoo = 0; }
 void  foo::operator ()     (foo& afoo) { afoo.ifoo = 0; }
 void* foo::operator new    (size_t ival) throw () { ival = 0; return 0; }
+void* foo::operator new[]    (size_t ival) throw () { ival = 0; return 0; }
 void  foo::operator delete (void *ptr) { ptr = 0; }
+void  foo::operator delete[] (void *ptr) { ptr = 0; }
 /**/  foo::operator int    () { return 0; }
 /**/  foo::operator char*  () { return 0; }
 
index 56702edbac1058a7cd985fcd384ea0ce50a95cb0..607dceb74b45be92fa83e04b0a690572ed522268 100644 (file)
@@ -63,7 +63,7 @@ set dm_type_foo_ref           "foo&"
 set dm_type_int_star           "int*"
 set dm_type_long_star          "long*"
 set dm_type_unsigned_int       "unsigned"
-set dm_type_void               ""
+set dm_type_void               "void"
 set dm_type_void_star          "void*"
 
 proc probe_demangler { } {
@@ -78,7 +78,7 @@ proc probe_demangler { } {
     global dm_type_void
     global dm_type_void_star
 
-    send_gdb "print &'foo::operator,(foo&)'\n"
+    send_gdb "print &foo::operator,(foo&)\n"
     gdb_expect {
        -re ".*foo::operator, \\(.*foo.*&.*\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -97,7 +97,7 @@ proc probe_demangler { } {
        }
     }
 
-    send_gdb "print &'dm_type_char_star'\n"
+    send_gdb "print &dm_type_char_star\n"
     gdb_expect {
        -re ".*dm_type_char_star\\(char \\*\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -117,7 +117,7 @@ proc probe_demangler { } {
        }
     }
 
-    send_gdb "print &'dm_type_foo_ref'\n"
+    send_gdb "print &dm_type_foo_ref\n"
     gdb_expect {
        -re ".*dm_type_foo_ref\\(foo &\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -136,7 +136,7 @@ proc probe_demangler { } {
        }
     }
 
-    send_gdb "print &'dm_type_int_star'\n"
+    send_gdb "print &dm_type_int_star\n"
     gdb_expect {
        -re ".*dm_type_int_star\\(int \\*\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -155,7 +155,7 @@ proc probe_demangler { } {
        }
     }
 
-    send_gdb "print &'dm_type_long_star'\n"
+    send_gdb "print &dm_type_long_star\n"
     gdb_expect {
        -re ".*dm_type_long_star\\(long \\*\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -174,7 +174,7 @@ proc probe_demangler { } {
        }
     }
 
-    send_gdb "print &'dm_type_unsigned_int'\n"
+    send_gdb "print &dm_type_unsigned_int\n"
     gdb_expect {
        -re ".*dm_type_unsigned_int\\(unsigned int\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -193,7 +193,7 @@ proc probe_demangler { } {
        }
     }
 
-    send_gdb "print &'dm_type_void'\n"
+    send_gdb "print &dm_type_void\n"
     gdb_expect {
        -re ".*dm_type_void\\(void\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -212,7 +212,7 @@ proc probe_demangler { } {
        }
     }
 
-    send_gdb "print &'dm_type_void_star'\n"
+    send_gdb "print &dm_type_void_star\n"
     gdb_expect {
        -re ".*dm_type_void_star\\(void \\*\\).*\r\n$gdb_prompt $" {
            # v2 demangler
@@ -241,6 +241,7 @@ proc info_func_regexp { name demangled } {
     global gdb_prompt
 
     send_gdb "info function $name\n"
+    set demangled [regsub {\\\(void\\\)} $demangled {\(\)}]
     gdb_expect {
        -re ".*File .*:\r\n(class |)$demangled\r\n.*$gdb_prompt $" {
            pass "info function for \"$name\""
@@ -277,16 +278,16 @@ proc print_addr_2 { name good } {
 
     set good_pattern [string_to_regexp $good]
 
-    send_gdb "print &'$name'\n"
+    send_gdb "print &$name\n"
     gdb_expect {
        -re ".* = .* $hex <$good_pattern>\r\n$gdb_prompt $" {
-           pass "print &'$name'"
+           pass "print &$name"
        }
        -re ".*$gdb_prompt $" {
-           fail "print &'$name'"
+           fail "print &$name"
        }
        timeout {
-           fail "print &'$name' (timeout)"
+           fail "print &$name (timeout)"
        }
     }
 }
@@ -305,19 +306,19 @@ proc print_addr_2_kfail { name good bad bugid } {
     set good_pattern [string_to_regexp $good]
     set bad_pattern [string_to_regexp $bad]
 
-    send_gdb "print &'$name'\n"
+    send_gdb "print &$name\n"
     gdb_expect {
        -re ".* = .* $hex <$good_pattern>\r\n$gdb_prompt $" {
-           pass "print &'$name'"
+           pass "print &$name"
        }
        -re ".* = .* $hex <$bad_pattern>\r\n$gdb_prompt $" {
-           kfail $bugid "print &'$name'"
+           kfail $bugid "print &$name"
        }
        -re ".*$gdb_prompt $" {
-           fail "print &'$name'"
+           fail "print &$name"
        }
        timeout {
-           fail "print &'$name' (timeout)"
+           fail "print &$name (timeout)"
        }
     }
 }
@@ -327,7 +328,12 @@ proc print_addr_2_kfail { name good bad bugid } {
 #
 
 proc print_addr { name } {
-    print_addr_2 "$name" "$name"
+    set expected [regsub {\(void\)} $name {()}]
+    if {[string first "::" $name] == -1} {
+       # C function -- must be qutoed
+       set name "'$name'"
+    }
+    print_addr_2 "$name" $expected
 }
 
 #
@@ -460,10 +466,13 @@ proc test_paddr_operator_functions {} {
     print_addr "foo::operator\[\]($dm_type_foo_ref)"
     print_addr "foo::operator()($dm_type_foo_ref)"
 
-    gdb_test "print &'foo::operator new'" \
+    gdb_test "print &foo::operator new" \
        " = .* $hex <foo::operator new\\(.*\\)(| static)>"
+    gdb_test "print &foo::operator new\[\]" \
+       " = .* $hex <foo::operator new\\\[\\\]\\(.*\\)(| static)>"    
     if { !$hp_aCC_compiler } {
        print_addr "foo::operator delete($dm_type_void_star)"
+       print_addr "foo::operator delete[]($dm_type_void_star)"
     } else {
        gdb_test "print &'foo::operator delete($dm_type_void_star) static'" \
            " = .*(0x\[0-9a-f\]+|) <foo::operator delete.*>"