[gdb/testsuite] Use hex_for_lang in gdb.base/parse_number.exp
authorTom de Vries <tdevries@suse.de>
Wed, 18 May 2022 10:12:29 +0000 (12:12 +0200)
committerTom de Vries <tdevries@suse.de>
Wed, 18 May 2022 10:12:29 +0000 (12:12 +0200)
In gdb.base/parse_number.exp, add a new proc hex_for_lang that formats a hex
number appropriately for a given language.

Tested on x86_64-linux.

gdb/testsuite/gdb.base/parse_number.exp

index ccef3f0965572ff2662ccf6db60ef8dac73edbf0..9668099bd826886308d0b3d23d0b758f39bf1d82 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+# Format hex value VAL for language LANG.
+
+proc hex_for_lang { lang val } {
+    set val [regsub ^0x $val ""]
+    if { $lang == "modula-2" } {
+       set val 0[string toupper $val]H
+    } else {
+       set val 0x$val
+    }
+    return $val
+}
+
 # Test parsing numbers.  Several language parsers had the same bug
 # around parsing large 64-bit numbers, hitting undefined behavior, and
 # thus crashing a GDB built with UBSan.  This testcase goes over all
@@ -53,11 +65,12 @@ proc test_parse_numbers {arch} {
        gdb_test_no_output "set language $lang"
 
        set val "0xffffffffffffffff"
+       set val [hex_for_lang $lang $val]
        if {$lang == "fortran"} {
            gdb_test "p/x $val" " = $fortran_value"
            gdb_test "ptype $val" " = $fortran_type"
        } elseif {$lang == "modula-2"} {
-           gdb_test "p/x 0FFFFFFFFFFFFFFFFH" "Overflow on numeric constant\\."
+           gdb_test "p/x $val" "Overflow on numeric constant\\."
        } elseif {$lang == "unknown"} {
            gdb_test "p/x $val" \
                "expression parsing not implemented for language \"Unknown\""