aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/lib/g++-dg.exp
blob: cad429e729e26375d9ee4ecf6ea04d311db63393 (plain)
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
#   Copyright (C) 1997, 1999 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-g++@prep.ai.mit.edu

# Define g++ callbacks for dg.exp.

load_lib dg.exp

proc g++-dg-test { prog do_what extra_tool_flags } {
    # Set up the compiler flags, based on what we're going to do.

    switch $do_what {
	"preprocess" {
	    set compile_type "preprocess"
	    set output_file "[file rootname [file tail $prog]].i"
	}
	"compile" {
	    set compile_type "assembly"
	    set output_file "[file rootname [file tail $prog]].s"
	}
	"assemble" {
	    set compile_type "object"
	    set output_file "[file rootname [file tail $prog]].o"
	}
	"link" {
	    set compile_type "executable"
	    set output_file "a.out"
	    # The following line is needed for targets like the i960 where
	    # the default output file is b.out.  Sigh.
	}
	"run" {
	    set compile_type "executable"
	    # FIXME: "./" is to cope with "." not being in $PATH.
	    # Should this be handled elsewhere?
	    # YES.
	    set output_file "./a.out"
	    # This is the only place where we care if an executable was
	    # created or not.  If it was, dg.exp will try to run it.
	    remote_file build delete $output_file;
	}
	default {
	    perror "$do_what: not a valid dg-do keyword"
	    return ""
	}
    }
    set options ""
    if { $extra_tool_flags != "" } {
	lappend options "additional_flags=$extra_tool_flags"
    }

    set comp_output [g++_target_compile "$prog" "$output_file" "$compile_type" $options];

    return [list $comp_output $output_file]
}


proc g++-dg-prune { system text } {

    # If we see "region xxx is full" then the testcase is too big for ram.
    # This is tricky to deal with in a large testsuite like c-torture so
    # deal with it here.  Just mark the testcase as unsupported.
    if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $text] {
	# The format here is important.  See dg.exp.
	return "::unsupported::memory full"
    }

    return $text
}