aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Machado <lgustavo@codesourcery.com>2014-06-17 10:42:23 +0100
committerLuis Machado <lgustavo@codesourcery.com>2014-06-17 10:42:23 +0100
commit70795c525e5b8ca5e9fb8ffbaf33a5f281d53320 (patch)
treeb518559fe27b901ede536fcdb97dc6c285ffceda
parentc8de034b6ae75f0b23d45d15c927daac61c33a3c (diff)
downloadgdb-70795c525e5b8ca5e9fb8ffbaf33a5f281d53320.zip
gdb-70795c525e5b8ca5e9fb8ffbaf33a5f281d53320.tar.gz
gdb-70795c525e5b8ca5e9fb8ffbaf33a5f281d53320.tar.bz2
In a couple functions (type_update_when_use_rtti_test and
skip_type_update_when_not_use_rtti_test) the testcase assumes an uninitialized object has a specific type. In particular, 'ptr' and 's'. In reality the compiler is free to do what it wants with that uninitialized variable, even initialize it beforehand with the future assignment's value. This is exactly what happens on some targets. ptr should have type 'Base *', but it really has type 'Derived *' because it is already initialized (earlier) by the compiler. The same thing happens to 's'. The following patch addresses this by explicitly initializing those variables so the compiler doesn't optimize their assignments and GDB can print their correct values. 2014-06-17 Luis Machado <lgustavo@codesourcery.com> * gdb.mi/mi-var-rtti.cc (type_update_when_use_rtti_test): Initialize ptr and S explicitly. (skip_type_update_when_not_use_rtti_test): Likewise.
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.mi/mi-var-rtti.cc28
2 files changed, 22 insertions, 12 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index cb671f5..a4e4e3e 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-17 Luis Machado <lgustavo@codesourcery.com>
+
+ * gdb.mi/mi-var-rtti.cc (type_update_when_use_rtti_test):
+ Initialize ptr and S explicitly.
+ (skip_type_update_when_not_use_rtti_test): Likewise.
+
2014-06-16 Keith Seitz <keiths@redhat.com>
PR mi/15863
diff --git a/gdb/testsuite/gdb.mi/mi-var-rtti.cc b/gdb/testsuite/gdb.mi/mi-var-rtti.cc
index 94098b2..fe19b88 100644
--- a/gdb/testsuite/gdb.mi/mi-var-rtti.cc
+++ b/gdb/testsuite/gdb.mi/mi-var-rtti.cc
@@ -241,6 +241,12 @@ void use_rtti_with_multiple_inheritence_test ()
void type_update_when_use_rtti_test ()
{
/*: BEGIN: type_update_when_use_rtti :*/
+ Base *ptr = 0;
+ struct S {
+ Base* ptr;
+ S ( Base* v ) :
+ ptr ( v ) {}
+ } s ( ptr );
Derived d;
/*:
set testname type_update_when_use_rtti
@@ -260,12 +266,8 @@ void type_update_when_use_rtti_test ()
check_derived_children_without_rtti S.public.ptr s.ptr $testname
:*/
- Base* ptr = &d;
- struct S {
- Base* ptr;
- S ( Base* v ) :
- ptr ( v ) {}
- } s ( &d );
+ ptr = &d;
+ s.ptr = &d;
/*:
mi_varobj_update_with_type_change PTR {Derived \*} 2 \
"update ptr to derived in $testname"
@@ -295,6 +297,12 @@ void type_update_when_use_rtti_test ()
void skip_type_update_when_not_use_rtti_test ()
{
/*: BEGIN: skip_type_update_when_not_use_rtti :*/
+ Base *ptr = 0;
+ struct S {
+ Base* ptr;
+ S ( Base* v ) :
+ ptr ( v ) {}
+ } s ( ptr );
Derived d;
/*:
set testname skip_type_update_when_not_use_rtti
@@ -314,12 +322,8 @@ void skip_type_update_when_not_use_rtti_test ()
check_derived_children_without_rtti S.public.ptr s.ptr $testname
:*/
- Base* ptr = &d;
- struct S {
- Base* ptr;
- S ( Base* v ) :
- ptr ( v ) {}
- } s ( &d );
+ ptr = &d;
+ s.ptr = &d;
/*:
mi_varobj_update PTR {PTR PTR.public.A} \
"update ptr to derived type in $testname"