# Copyright 2011-2018 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. if [using_fission] { untested "fission does not support macros yet" return -1 } get_compiler_info if ![test_compiler_info gcc*] { untested "no compiler info" return -1 } # Don't use "debug" here. Otherwise "-g" would be appended to the gcc # command line, possibly overriding "-g3" (depending on gcc version). set options "additional_flags=-g3" if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} $options] } { return -1 } if ![runto_main] { untested "could not run to main" return -1 } # Test various error messages. gdb_test "info macro -- -all" \ "The symbol `-all' has no definition .*\r\nat .*$srcfile:\[0-9\]+" \ "info macro -- -all" gdb_test "info macro -- -all" \ "The symbol `-all' has no definition .*\r\nat .*$srcfile:\[0-9\]+" \ "info macro -- -all" gdb_test "info macro -all --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" \ "info macro -all --" gdb_test "info macro -all --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" \ "info macro -all --" gdb_test "info macro -all --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" \ "info macro -all --" gdb_test "info macro --" \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" \ "info macro --" gdb_test "info macro -- " \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" \ "'info macro -- '" gdb_test "info macro -- " \ "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" \ "'info macro -- '" gdb_test "info macro -invalid-option" \ "Unrecognized option.*Try \"help info macro\"\." \ "info macro -invalid-option 1" gdb_test "info macro -invalid-option" \ "Unrecognized option.*Try \"help info macro\"\." \ "info macro -invalid-option" gdb_test "info macro -invalid-option FOO" \ "Unrecognized option.*Try \"help info macro\"\." \ "info macro -invalid-option FOO" gdb_test "info macro -invalid-option FOO" \ "Unrecognized option.*Try \"help info macro\"\." \ "info macro -invalid-option FOO" # Single macro lookups. gdb_test "info macro -- FOO" \ ".*#define FOO \"hello\"" \ "info macro -- FOO" gdb_test "info macro -- FOO" \ ".*#define FOO \"hello\"" \ "info macro -- FOO" gdb_test "info macro -- FOO" \ ".*#define FOO \"hello\"" \ "info macro -- FOO" gdb_test "info macro FOO" \ ".*#define FOO \"hello\"" \ "info macro FOO" gdb_test "info macro FOO" \ ".*#define FOO \"hello\"" \ "info macro FOO" # 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" set testname "$test" gdb_test "$test" "$r1$r2$r3$r4" "$testname" set test "info macro -a -- FOO" set testname "$test" gdb_test "$test" "$r1$r2$r3$r4" "$testname" set test "info macros" set r1 ".*#define FOO \"hello\"" set r2 ".*#define ONE" set r3 ".*\r\n$gdb_prompt" set testname "$test 2" gdb_test_multiple "$test" $testname { -re "$r1$r2$r3" { pass $testname } -re ".*#define TWO.*\r\n$gdb_prompt" { fail $testname } -re ".*#define THREE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $testname } } gdb_test "next" ".*" "" set r1 ".*#define FOO \" \"" set r2 ".*#define ONE" set r3 ".*#define TWO" set r4 ".*\r\n$gdb_prompt" set testname "$test 3" gdb_test_multiple "$test" $testname { -re ".*#define THREE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $testname } -re "$r1$r2$r3$r4" { pass $testname } } gdb_test "next" ".*" "" # in alpabetical order... set r1 ".*#define FOO \"world\"" set r2 ".*#define ONE" set r3 ".*#define THREE" set r4 ".*#define TWO" set r5 ".*\r\n$gdb_prompt" set testname "$test 4" gdb_test_multiple "$test" $testname { -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $testname } -re "$r1$r2$r3$r4$r5" { pass $testname } } # same as above with a linespec. set test "info macros *\$pc" gdb_test_multiple "$test" $test { -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $test } -re "$r1$r2$r3$r4$r5" { pass $test } } gdb_test "next" ".*" "" set r1 ".*#define FOO \" \"" set r2 ".*#define ONE" set r3 ".*#define TWO." set r4 ".*\r\n$gdb_prompt" set test "info macros" set testname "$test 5" gdb_test_multiple "$test" $test { -re ".*#define THREE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $testname } -re "$r1$r2$r3$r4" { pass $testname } } gdb_test "next" ".*" "" gdb_test "next" ".*" "" set r1 ".*#define DEF_MACROS" set r2 ".*\r\n$gdb_prompt" set testname "$test 6" gdb_test_multiple "$test" $testname { -re ".*#define FOO \" \".*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOO \"hello\".*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOO \"world\".*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOO\\(a\\) foo = a.*" { fail $testname } -re ".*#define ONE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define TWO.*\r\n$gdb_prompt" { fail $testname } -re ".*#define THREE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $testname } -re "$r1$r2" { pass $testname } } gdb_test "next" ".*" "" set r1 ".*#define DEF_MACROS" set r2 ".*#define FOO\\(a\\) foo = a" set r3 ".*#define FOUR" set r4 ".*\r\n$gdb_prompt" set testname "$test 7" gdb_test_multiple "$test" $testname { -re ".*#define FOO \" \".*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOO \"hello\".*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOO \"world\".*\r\n$gdb_prompt" { fail $testname } -re ".*#define ONE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define TWO.*\r\n$gdb_prompt" { fail $testname } -re ".*#define THREE.*\r\n$gdb_prompt" { fail $testname } -re "$r1$r2$r3$r4" { pass $testname } } set test "info macros info-macros.c:42" set r1 ".*define DEF_MACROS" set r2 ".*define ONE" # info macros on the line where the #define or #include is # fails to find the macro defined (though it works on the next line.) setup_kfail "gdb/NNNN" *-*-* gdb_test "$test" "$r1$r2" "$test"