X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=bin%2Fblhc;h=d8c621bddbfd853a9bec9a552f0e6de8d24106a4;hb=ec6915157c741c96bfeed5a2a58246d59ccefdb5;hp=d2e5df761c09e45e5943cc7ba328cd8f34f3746f;hpb=ea4a36f6673fe09075554d52d327149469d427a7;p=blhc%2Fblhc.git diff --git a/bin/blhc b/bin/blhc index d2e5df7..d8c621b 100755 --- a/bin/blhc +++ b/bin/blhc @@ -37,7 +37,7 @@ my $warning_regex = qr/^(.+?):([0-9]+):[0-9]+: warning: (.+?) \[(.+?)\]$/; # Expected (hardening) flags. All flags are used as regexps. my @cflags = ( '-g', - '-O2', + '-O(?:2|3)', ); my @cflags_format = ( '-Wformat', @@ -71,6 +71,7 @@ my @ldflags_pie = ( ); # Renaming rules for the output so the regex parts are not visible. my %flag_renames = ( + '-O(?:2|3)' => '-O2', '-Wl,(-z,)?relro' => '-Wl,-z,relro', '-Wl,(-z,)?now' => '-Wl,-z,now', ); @@ -265,6 +266,7 @@ my @input = (); my $start = 0; my $continuation = 0; +my $complete_line = undef; while (my $line = <>) { # We skip over unimportant lines at the beginning to prevent false # positives. @@ -296,10 +298,26 @@ while (my $line = <>) { # Join lines, but leave the "\" in place so it's clear where the # original line break was. - chomp $input[-1]; - $input[-1] .= ' ' . $line; + chomp $complete_line; + $complete_line .= ' ' . $line; + } + # Line continuation, line ends with "\". + if ($line =~ /\\\s*$/) { + $continuation = 1; + # Start line continuation. + if (not defined $complete_line) { + $complete_line = $line; + } + next; + } + + if (not $continuation) { + # Use the complete line if a line continuation occurred. + if (defined $complete_line) { + $line = $complete_line; + $complete_line = undef; + } - } else { # Ignore lines with no compiler commands. next if $line !~ /\b$cc_regex(?:\s|\\)/ and not $non_verbose; @@ -310,11 +328,6 @@ while (my $line = <>) { push @input, $line; } - - # Line continuation, line ends with "\". - if ($line =~ /\\\s*$/) { - $continuation = 1; - } } }