File: vla-optimized-out.exp

package info (click to toggle)
gdb-doc 13.1-1
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm
  • size: 234,284 kB
  • sloc: ansic: 1,988,072; asm: 373,465; exp: 187,579; cpp: 75,697; makefile: 69,432; sh: 24,829; yacc: 11,654; python: 9,602; ada: 6,680; xml: 6,073; perl: 5,077; pascal: 3,357; f90: 2,555; tcl: 1,902; lisp: 1,578; cs: 879; lex: 759; sed: 228; awk: 154; objc: 137; fortran: 57
file content (91 lines) | stat: -rw-r--r-- 3,029 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Copyright 2018-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 <http://www.gnu.org/licenses/>.

# Check whether we can determine the size of an optimized-out vla.

standard_testfile

# The EXE_SUFFIX is a string appended to the name of the test binary
# to make it unique per variation.
# The OPTIONS is a two item list, the first item is a list of compiler
# flags used for building the test binary, and the second item is a
# pattern which matches some expected output within this proc.
proc vla_optimized_out {exe_suffix options} {
    global testfile srcfile

    lassign $options compile_flags sizeof_result

    if { [prepare_for_testing "failed to prepare" "$testfile-$exe_suffix" $srcfile \
	      $compile_flags] } {
	return -1
    }

    if ![runto f1] {
	return
    }

    gdb_test "p a" \
	" = <optimized out>" \
	"printed optimized out vla"

    gdb_test "p sizeof (a)" \
	" = ($sizeof_result)" \
	"printed size of optimized out vla"

    # At lower optimisation levels, the upper bound of the array is
    # still defined, it's just the loctaion that tells GDB the array
    # is optimised out.  In that case, when we access an element that
    # is within the bounds of the array an answer of '<optimized out>'
    # is reasonable.
    #
    # At higher optimisation levels, the array bounds themselves have
    # been removed.  As such GDB can't be expected to know if the
    # array contains _any_ elements at all.  It seems reasonable in
    # that case to reply with 'no such vector element'.
    gdb_test "p a\[0\]" \
	"(= <optimized out>|no such vector element)" \
	"print out of range element of vla (0)"

    gdb_test "p a\[6\]" \
	"no such vector element" \
	"print out of range element of vla (6)"

    gdb_test "p a\[0xffffffff\]" \
	"no such vector element" \
	"print out of range element of vla (0xffffffff)"
}

set o1_sizeof_result "6"
if { [istarget powerpc*-*-*] && [gcc_major_version] != -1 } {
    set o1_sizeof_result "<optimized out>|6"
}

set test_matrix {}
lappend test_matrix \
    "o1" \
    [list {debug optimize=-O1 additional_flags=-DNOCLONE} $o1_sizeof_result]
lappend test_matrix \
    "o3" \
    {{debug optimize=-O3} "<optimized out>|6"}
lappend test_matrix \
    "o3_strict" \
    {{debug optimize=-O3 additional_flags=-gstrict-dwarf} "<optimized out>|6"}

foreach {test_prefix options} $test_matrix {
    with_test_prefix $test_prefix {
	vla_optimized_out $test_prefix $options
    }
}