# Copyright 2011-2023 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 . standard_testfile .c # Fission doesn't support macros yet. Bug 15954. require !using_fission if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug macros}] } { return -1 } if ![runto_main] { return -1 } # Test various error messages. gdb_test "info macro -- -all" \ "The symbol `-all' has no definition .*\r\nat .*$srcfile:\[0-9\]+" gdb_test "info macro -- -all" \ "The symbol `-all' has no definition .*\r\nat .*$srcfile:\[0-9\]+" gdb_test "info macro -all --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*" gdb_test "info macro -all --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*" gdb_test "info macro -all --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*" gdb_test "info macro --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*" gdb_test "info macro -- " \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*" \ "info macro -- " gdb_test "info macro -- " \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*" \ "info macro -- " gdb_test "info macro -invalid-option" \ "Unrecognized option.*Try \"help info macro\"\." gdb_test "info macro -invalid-option" \ "Unrecognized option.*Try \"help info macro\"\." gdb_test "info macro -invalid-option FOO" \ "Unrecognized option.*Try \"help info macro\"\." gdb_test "info macro -invalid-option FOO" \ "Unrecognized option.*Try \"help info macro\"\." # Single macro lookups. gdb_test "info macro -- FOO" \ ".*#define FOO \"hello\"" gdb_test "info macro -- FOO" \ ".*#define FOO \"hello\"" gdb_test "info macro -- FOO" \ ".*#define FOO \"hello\"" gdb_test "info macro FOO" \ ".*#define FOO \"hello\"" gdb_test "info macro FOO" \ ".*#define FOO \"hello\"" # Multiple macro lookups. set test "info macro -a FOO" set r1 ".*#define FOO \"hello\"" set r2 ".*#define FOO \" \"" set r3 ".*#define FOO \"world\"" set r4 ".*#define FOO\\(a\\) foo = a" set testname "$test 1" gdb_test "$test" "$r1$r2$r3$r4" "$testname" set test "info macro -a -- FOO" set testname "$test 1" gdb_test "$test" "$r1$r2$r3$r4" "$testname" set test "info macro -all -- FOO" set testname "$test 1" gdb_test "$test" "$r1$r2$r3$r4" "$testname" set test "info macro -a -- FOO" gdb_test "$test" "$r1$r2$r3$r4" set test "info macro -a -- FOO" gdb_test "$test" "$r1$r2$r3$r4" set test "info macros" set r1 "#define FOO \"hello\"" set r2 "#define ONE" set testname "$test 2" gdb_test_lines $test $testname $r1.*$r2 \ -re-not "#define TWO" \ -re-not "#define THREE" \ -re-not "#define FOUR" gdb_test "next" "" "next, 1" set r1 "#define FOO \" \"" set r2 "#define ONE" set r3 "#define TWO" set testname "$test 3" gdb_test_lines $test $testname $r1.*$r2.*$r3 \ -re-not "#define THREE" \ -re-not "#define FOUR" gdb_test "next" "" "next, 2" # in alphabetical order... set r1 "#define FOO \"world\"" set r2 "#define ONE" set r3 "#define THREE" set r4 "#define TWO" set testname "$test 4" gdb_test_lines $test $testname $r1.*$r2.*$r3.*$r4 \ -re-not "#define FOUR" # same as above with a linespec. set test "info macros *\$pc" gdb_test_lines $test "" $r1.*$r2.*$r3.*$r4 \ -re-not "#define FOUR" gdb_test "next" "" "next, 3" set r1 "#define FOO \" \"" set r2 "#define ONE" set r3 "#define TWO." set test "info macros" set testname "$test 5" gdb_test_lines $test $testname $r1.*$r2.*$r3 \ -re-not "#define THREE" \ -re-not "#define FOUR" gdb_test "next" "" "next, 4" gdb_test "next" "" "next, 5" set r1 "#define DEF_MACROS" set testname "$test 6" gdb_test_lines $test $testname $r1 \ -re-not "#define FOO" \ -re-not "#define ONE" \ -re-not "#define TWO" \ -re-not "#define THREE" \ -re-not "#define FOUR" gdb_test "next" "" "next, 6" set r1 "#define DEF_MACROS" set r2 "#define FOO\\(a\\) foo = a" set r3 "#define FOUR" set testname "$test 7" gdb_test_lines $test $testname $r1.*$r2.*$r3 \ -re-not "#define FOO \" \"" \ -re-not "#define FOO \"hello\"" \ -re-not "#define FOO \"world\"" \ -re-not "#define ONE" \ -re-not "#define TWO" \ -re-not "#define THREE" set test "info macros info-macros.c:42" set r1 "#define DEF_MACROS " set r2 "#define ONE" gdb_test_lines "$test" "" [multi_line \ "" \ "$r1" \ "(.*\r\n)?$r2"]