1da0c48c4Sopenharmony_ci#! /bin/sh
2da0c48c4Sopenharmony_ci# Copyright (C) 2017 Red Hat, Inc.
3da0c48c4Sopenharmony_ci# This file is part of elfutils.
4da0c48c4Sopenharmony_ci#
5da0c48c4Sopenharmony_ci# This file is free software; you can redistribute it and/or modify
6da0c48c4Sopenharmony_ci# it under the terms of the GNU General Public License as published by
7da0c48c4Sopenharmony_ci# the Free Software Foundation; either version 3 of the License, or
8da0c48c4Sopenharmony_ci# (at your option) any later version.
9da0c48c4Sopenharmony_ci#
10da0c48c4Sopenharmony_ci# elfutils is distributed in the hope that it will be useful, but
11da0c48c4Sopenharmony_ci# WITHOUT ANY WARRANTY; without even the implied warranty of
12da0c48c4Sopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13da0c48c4Sopenharmony_ci# GNU General Public License for more details.
14da0c48c4Sopenharmony_ci#
15da0c48c4Sopenharmony_ci# You should have received a copy of the GNU General Public License
16da0c48c4Sopenharmony_ci# along with this program.  If not, see <http://www.gnu.org/licenses/>.
17da0c48c4Sopenharmony_ci
18da0c48c4Sopenharmony_ci. $srcdir/test-subr.sh
19da0c48c4Sopenharmony_ci
20da0c48c4Sopenharmony_ci# Tests exprloc for an Ada record variants byte_size.
21da0c48c4Sopenharmony_ci
22da0c48c4Sopenharmony_ci# = pck.ads
23da0c48c4Sopenharmony_ci#
24da0c48c4Sopenharmony_ci# with System;
25da0c48c4Sopenharmony_ci#
26da0c48c4Sopenharmony_ci# package Pck is
27da0c48c4Sopenharmony_ci#
28da0c48c4Sopenharmony_ci#    type One_To_Five is range 1 .. 5;
29da0c48c4Sopenharmony_ci#
30da0c48c4Sopenharmony_ci#    type Rec (Discr : One_To_Five) is
31da0c48c4Sopenharmony_ci#    record
32da0c48c4Sopenharmony_ci#       case Discr is
33da0c48c4Sopenharmony_ci#          when 1 => Field1 : Integer;
34da0c48c4Sopenharmony_ci#          when 4 => null;
35da0c48c4Sopenharmony_ci#          when 3 => Field3 : Boolean;
36da0c48c4Sopenharmony_ci#          when 5 => null;
37da0c48c4Sopenharmony_ci#          when others => null;
38da0c48c4Sopenharmony_ci#       end case;
39da0c48c4Sopenharmony_ci#    end record;
40da0c48c4Sopenharmony_ci#
41da0c48c4Sopenharmony_ci#    procedure Do_Nothing (A : System.Address);
42da0c48c4Sopenharmony_ci#
43da0c48c4Sopenharmony_ci# end Pck;
44da0c48c4Sopenharmony_ci
45da0c48c4Sopenharmony_ci# = pck.adb
46da0c48c4Sopenharmony_ci#
47da0c48c4Sopenharmony_ci# package body Pck is
48da0c48c4Sopenharmony_ci#
49da0c48c4Sopenharmony_ci#    procedure Do_Nothing (A : System.Address) is
50da0c48c4Sopenharmony_ci#    begin
51da0c48c4Sopenharmony_ci#       null;
52da0c48c4Sopenharmony_ci#    end Do_Nothing;
53da0c48c4Sopenharmony_ci#
54da0c48c4Sopenharmony_ci# end Pck;
55da0c48c4Sopenharmony_ci
56da0c48c4Sopenharmony_ci# = foo.adb
57da0c48c4Sopenharmony_ci#
58da0c48c4Sopenharmony_ci# with Pck; use Pck;
59da0c48c4Sopenharmony_ci#
60da0c48c4Sopenharmony_ci# procedure Foo is
61da0c48c4Sopenharmony_ci#
62da0c48c4Sopenharmony_ci#    R : Rec (1);
63da0c48c4Sopenharmony_ci#
64da0c48c4Sopenharmony_ci# begin
65da0c48c4Sopenharmony_ci#    Do_Nothing (R'Address);
66da0c48c4Sopenharmony_ci# end Foo;
67da0c48c4Sopenharmony_ci
68da0c48c4Sopenharmony_ci# gnatmake -g -fgnat-encodings=minimal foo.adb -cargs
69da0c48c4Sopenharmony_ci
70da0c48c4Sopenharmony_citestfiles testfile-ada-variant
71da0c48c4Sopenharmony_ci
72da0c48c4Sopenharmony_citempfiles testfile.temp testfile2.temp
73da0c48c4Sopenharmony_ci
74da0c48c4Sopenharmony_citestrun ${abs_top_builddir}/src/readelf --debug-dump=info \
75da0c48c4Sopenharmony_ci        testfile-ada-variant > testfile.temp
76da0c48c4Sopenharmony_ci
77da0c48c4Sopenharmony_cigrep -A6 byte_size testfile.temp | grep -A6 exprloc > testfile2.temp
78da0c48c4Sopenharmony_ci
79da0c48c4Sopenharmony_cidiff -u testfile2.temp - <<EOF
80da0c48c4Sopenharmony_ci             byte_size            (exprloc) 
81da0c48c4Sopenharmony_ci              [ 0] push_object_address
82da0c48c4Sopenharmony_ci              [ 1] deref_size 1
83da0c48c4Sopenharmony_ci              [ 3] call4 [    95]
84da0c48c4Sopenharmony_ci              [ 8] plus_uconst 7
85da0c48c4Sopenharmony_ci              [10] const1s -4
86da0c48c4Sopenharmony_ci              [12] and
87da0c48c4Sopenharmony_ciEOF
88da0c48c4Sopenharmony_ci
89da0c48c4Sopenharmony_ciexit 0
90