summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/perl/t/run/switchF2.t
blob: bf40e403e999fb8bb3712db8b295eecbaffaf73d (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
#!./perl

BEGIN {
    chdir 't' if -d 't';
    @INC = '../lib';
    require './test.pl';
}

{ # perl #116190
  fresh_perl_is('print qq!@F!', '1 2',
		{
		 stdin => "1:2",
		 switches => [ '-n', '-F:' ],
		}, "passing -F implies -a");
  fresh_perl_is('print qq!@F!', '1 2',
		{
		 stdin => "1:2",
		 switches => [ '-F:' ],
		}, "passing -F implies -an");
  fresh_perl_is('print join q!,!, @F', '1,2',
		{
		 stdin => "1 2",
		 switches => [ '-a' ],
		}, "passing -a implies -n");
}


my $have_config = eval { require Config; 1 };
SKIP:
{
  $have_config or skip "Can't check if we have threads", 1;
  $Config::Config{usethreads} or skip "No threads", 1;
  is_miniperl() and skip "threads module not available under miniperl", 1;
  # this would only fail under valgrind/ASAN
  fresh_perl_is('print $F[1]; threads->new(sub {})->join', "b",
                {
                    switches => [ "-F,", "-Mthreads" ],
                    stdin => "a,b,c",
                }, "PL_splitstr freed in each thread");
}

{
  # old value of PL_splitstr wasn't freed with multiple switches (it wasn't safe to before)
  # this would only fail under valgrind/LSAN
  fresh_perl_is('print $F[1]', "b",
                {
                    switches => [ "-F:", "-F," ],
                    stdin => "a,b,c",
                }, "PL_splitstr freed on extra -F switch");
}

done_testing();