]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PR gdb/10728
authorChris Moller <cmoller@cygnus>
Mon, 8 Feb 2010 18:27:53 +0000 (18:27 +0000)
committerChris Moller <cmoller@cygnus>
Mon, 8 Feb 2010 18:27:53 +0000 (18:27 +0000)
* valarith.c (value_ptrdiff): Added a test for a zero type length,
warn if found, and assume length = 1.
* gdb.cp/pr10728-x.h: New file.
* gdb.cp/pr10728-x.cc: New file.
* gdb.cp/pr10728-y.cc: New file.
* gdb.cp/pr10728.exp: New file.
* gdb.cp/Makefile.in (EXECUTABLES): Add pr10728

gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/Makefile.in
gdb/testsuite/gdb.cp/pr10728-x.cc [new file with mode: 0644]
gdb/testsuite/gdb.cp/pr10728-x.h [new file with mode: 0644]
gdb/testsuite/gdb.cp/pr10728-y.cc [new file with mode: 0644]
gdb/testsuite/gdb.cp/pr10728.exp [new file with mode: 0644]
gdb/valarith.c

index e4ac3b4acfbdec9394b795facdd5c997219b9007..b5e75e08e35d125cb23f6e72f52d28d241c5ca11 100644 (file)
@@ -1,3 +1,9 @@
+Mon Feb  8 13:17:10 2010  Chris Moller  <moller@mollerware.com>
+
+       PR gdb/10728
+       * valarith.c (value_ptrdiff): Added a test for a zero type length,
+       warn if found, and assume length = 1. 
+
 2010-02-08  Chris Moller  <cmoller@redhat.com>
 
        PR gdb/9067
index d121ff2f35ce1a95677b4e938617e936fe8f0d1e..ccdc8ef8bae0aec6bb209606e9eb76a64a85ffac 100644 (file)
@@ -1,3 +1,12 @@
+Mon Feb  8 13:18:22 2010  Chris Moller  <moller@mollerware.com>
+
+       PR gdb/10728
+       * gdb.cp/pr10728-x.h: New file.
+       * gdb.cp/pr10728-x.cc: New file.
+       * gdb.cp/pr10728-y.cc: New file.
+       * gdb.cp/pr10728.exp: New file.
+       * gdb.cp/Makefile.in (EXECUTABLES): Add pr10728
+
 Mon Feb  8 12:54:54 2010  Chris Moller  <moller@mollerware.com>
 
        PR gdb/9067
index aa9158377bb0c856943df7d51e09d7f67359c6f7..d78258ea756473abea60e045192a5433d5bb3e71 100644 (file)
@@ -4,7 +4,8 @@ srcdir = @srcdir@
 EXECUTABLES = ambiguous annota2 anon-union cplusfuncs cttiadd \
        derivation inherit local member-ptr method misc \
         overload ovldbreak ref-typ ref-typ2 templates userdef virtfunc namespace \
-       ref-types ref-params method2 pr9594 gdb2495 virtfunc2 pr9067
+       ref-types ref-params method2 pr9594 gdb2495 virtfunc2 pr9067 \
+       pr1072
 
 all info install-info dvi install uninstall installcheck check:
        @echo "Nothing to be done for $@..."
diff --git a/gdb/testsuite/gdb.cp/pr10728-x.cc b/gdb/testsuite/gdb.cp/pr10728-x.cc
new file mode 100644 (file)
index 0000000..7623c0b
--- /dev/null
@@ -0,0 +1,7 @@
+#include "pr10728-x.h"
+
+int main()
+{
+  X* x = y();
+  return 0;            // marker 1
+}
diff --git a/gdb/testsuite/gdb.cp/pr10728-x.h b/gdb/testsuite/gdb.cp/pr10728-x.h
new file mode 100644 (file)
index 0000000..63737d9
--- /dev/null
@@ -0,0 +1,9 @@
+struct Y;
+struct X
+{
+  Y* y1;
+  Y* y2;
+};
+
+X* y();
+
diff --git a/gdb/testsuite/gdb.cp/pr10728-y.cc b/gdb/testsuite/gdb.cp/pr10728-y.cc
new file mode 100644 (file)
index 0000000..84b222d
--- /dev/null
@@ -0,0 +1,11 @@
+#include "pr10728-x.h"
+struct Y{};
+
+X* y()
+{
+  static X xx;
+  static Y yy;
+  xx.y1 = &yy;
+  xx.y2 = xx.y1+1;
+  return &xx;
+}
diff --git a/gdb/testsuite/gdb.cp/pr10728.exp b/gdb/testsuite/gdb.cp/pr10728.exp
new file mode 100644 (file)
index 0000000..7ad1bc7
--- /dev/null
@@ -0,0 +1,66 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite
+
+set nl         "\[\r\n\]+"
+
+if { [skip_cplus_tests] } { continue }
+
+load_lib "cp-support.exp"
+
+set testfile "pr10728"
+set srcfile ${testfile}-x.cc
+set tfx ${testfile}-x
+set tfy ${testfile}-y
+set binfile ${objdir}/${subdir}/${testfile}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${tfy}.cc" "${tfy}.o" object {c++}] != "" } {
+     untested pr10728.exp
+     return -1
+}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${tfx}.cc" "${tfx}.o" object {debug c++}] != "" } {
+     untested pr10728.exp
+     return -1
+}
+
+if  { [gdb_compile "${tfx}.o ${tfy}.o" ${binfile} executable {debug c++}] != "" } {
+     untested pr10728.exp
+     return -1
+}
+
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+if ![runto_main] then {
+    perror "couldn't run to breakpoint"
+    continue
+}
+
+# set a breakpoint at the return stmt
+
+gdb_breakpoint [gdb_get_line_number "marker 1"]
+gdb_continue_to_breakpoint "marker 1"
+
+gdb_test "print x->y2 - x->y1" "warning: Type size unknown, assuming 1\. Try casting to a known type, or void \*\.\[^=\]*= 1"
+
+gdb_exit
+return 0
+
+
index ed76b0960ba73b8450083451e6b56e9805fa676a..c87bc6f255e55cbf44f45d0a716d8e74360f98f7 100644 (file)
@@ -122,6 +122,13 @@ First argument of `-' is a pointer and second argument is neither\n\
 an integer nor a pointer of the same type."));
 
   sz = TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1)));
+  if (sz == 0) 
+    {
+      warning (_("Type size unknown, assuming 1. "
+               "Try casting to a known type, or void *."));
+      sz = 1;
+    }
+
   return (value_as_long (arg1) - value_as_long (arg2)) / sz;
 }