]> ruderich.org/simon Gitweb - blhc/blhc.git/commitdiff
Improve line continuation to handle ignored lines correctly.
authorSimon Ruderich <simon@ruderich.org>
Sat, 17 Mar 2012 20:16:03 +0000 (21:16 +0100)
committerSimon Ruderich <simon@ruderich.org>
Sat, 17 Mar 2012 20:16:03 +0000 (21:16 +0100)
bin/blhc
t/logs/bad-multiline
t/tests.t

index 38ca653cd655b8dd6209df0229fdf86e1754edc6..d8c621bddbfd853a9bec9a552f0e6de8d24106a4 100755 (executable)
--- a/bin/blhc
+++ b/bin/blhc
@@ -266,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.
@@ -297,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;
 
@@ -311,11 +328,6 @@ while (my $line = <>) {
 
             push @input, $line;
         }
-
-        # Line continuation, line ends with "\".
-        if ($line =~ /\\\s*$/) {
-            $continuation = 1;
-        }
     }
 }
 
index 91f63a6a118796c45dca0e7a97baad36d6823a6e..ff7a82630f4edccf44fc11ee9df903449e33080f 100644 (file)
@@ -30,3 +30,13 @@ gcc -g -O2 --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-s
 gcc -D_FORTIFY_SOURCE=2 -fstack-protector -c test-b.c
 # Escaped ";" - not really useful, just to check it works.
 gcc -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security \; -Werror=format-security -D_FORTIFY_SOURCE=1 -c test-a.c
+
+
+if ./bin-aux/missing --run makeinfo \
+    test.texi > test.info; \
+then \
+    echo good; \
+else
+    echo bad; \
+fi; \
+gcc -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=1 -c test-b.c
index 2a519a92e82fec18c9caf6f1b486f4e589c822a3..387ac2e3ba8ee7f95002d9a4bc8adda699f45f0c 100644 (file)
--- a/t/tests.t
+++ b/t/tests.t
@@ -281,11 +281,12 @@ CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat):  g
 CPPFLAGS missing (-D_FORTIFY_SOURCE=2):  gcc -Wformat-security -Werror=format-security -c test-b.c
 CFLAGS missing (-O2): gcc -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -c test-a.c
 CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -c test-a.c
-CFLAGS missing (-g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -O2 -D_FORTIFY_SOURCE=2 -c test-b.c
+CFLAGS missing (-g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -O2 -D_FORTIFY_SOURCE=2 -c test-b.c
 CFLAGS missing (-fstack-protector): gcc -g -O2 --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -c test-a.c
 CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -g -O2 --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -c test-a.c
-CFLAGS missing (-g -O2 --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -D_FORTIFY_SOURCE=2 -fstack-protector -c test-b.c
+CFLAGS missing (-g -O2 --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security):  \ gcc -D_FORTIFY_SOURCE=2 -fstack-protector -c test-b.c
 CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security \; -Werror=format-security -D_FORTIFY_SOURCE=1 -c test-a.c
+CPPFLAGS missing (-D_FORTIFY_SOURCE=2):  \ gcc -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=1 -c test-b.c
 ';
 
 is_blhc 'bad-library', '--all', 8,