set unk_type_re "has unknown type.*to its declared type"
set ptr_math_re "Cannot perform pointer math on incomplete type \"$data_var_type\", try casting to a known type, or void \\*\\."
set not_mem_re "Attempt to take address of value not located in memory\\."
+ set any_label_regexp "<\[^>\]+>"
set dataglobal_unk_re "dataglobal.*$unk_type_re"
{"dataglobal + 1" "" $dataglobal_unk_re $dataglobal_unk_re}
{"&dataglobal" "" "\\($data_var_type \\*\\) $hex <dataglobal>" " = $data_var_type \\*"}
{"&dataglobal + 1" "" $ptr_math_re $ptr_math_re}
- {"(int *) &dataglobal + 1" "" " = \\(int \\*\\) $hex <datalocal>" "int \\*"}
+ {"(int *) &dataglobal + 1" "" " = \\(int \\*\\) $hex $any_label_regexp" "int \\*"}
{"&(int) dataglobal + 1" "" $not_mem_re $not_mem_re}
{"&dataglobal, &dataglobal" "" "\\($data_var_type \\*\\) $hex <dataglobal>" " = $data_var_type \\*"}
{"*dataglobal" "" $dataglobal_unk_re $dataglobal_unk_re}
gdb_test "whatis $exp" $whatis
gdb_test "ptype $exp" $whatis
}
-
+
+ # Check that pointer arithmetic works as expected.
+ set addr1 [get_hexadecimal_valueof "&dataglobal" "*UNKNOWN*"]
+ set addr2 [get_hexadecimal_valueof "(int *) &dataglobal + 1" "*UNKNOWN*"]
+ set offset [expr $addr2 - $addr1]
+ set int_size [get_integer_valueof "sizeof (int)" "*UNKNOWN*"]
+ gdb_assert { $offset == $int_size }
+
# The only symbol xcoff puts out for statics is for the TOC entry.
# Possible, but hairy, for gdb to deal. Right now it doesn't, it
# doesn't know the variables exist at all.