Create x.gcov file for binary w/o x.gcda file (PR
authorMartin Liska <mliska@suse.cz>
Fri, 12 Aug 2016 12:23:32 +0000 (14:23 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 12 Aug 2016 12:23:32 +0000 (12:23 +0000)
* g++.dg/gcov/gcov-16.C: New test.
* lib/gcov.exp: Support new argument for run-gcov function.
    Adam Fineman  <afineman@afineman.com>

* gcov.c (process_file): Create .gcov file when .gcda
file is missing.

From-SVN: r239413

gcc/ChangeLog
gcc/gcov.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gcov/gcov-16.C [new file with mode: 0644]
gcc/testsuite/lib/gcov.exp

index 165e183b68c29d302b729529d4fe356eef88bcf0..14f95cf1a92173ed2f07c0e5ccb37a6ada0805cb 100644 (file)
@@ -1,3 +1,10 @@
+2016-08-12  Martin Liska  <mliska@suse.cz>
+
+           Adam Fineman  <afineman@afineman.com>
+
+       * gcov.c (process_file): Create .gcov file when .gcda
+       file is missing.
+
 2016-08-12  Marek Polacek  <polacek@redhat.com>
 
        PR c/7652
index f05ef7cb3c344805b6c5c373c7e12c963bc749f6..30fc167a0b34436e7954f8a7ea1dbd334fd90e95 100644 (file)
@@ -902,7 +902,7 @@ process_file (const char *file_name)
 
       fns = fn->next;
       fn->next = NULL;
-      if (fn->counts)
+      if (fn->counts || no_data_file)
        {
          unsigned src = fn->src;
          unsigned line = fn->line;
index b06e8fa67f68e87cc925b69b8c4eb40e3a0dfdfa..7700cec8b2d12a1c1a676742577aaecc1554e0a7 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-12  Martin Liska  <mliska@suse.cz>
+
+       * g++.dg/gcov/gcov-16.C: New test.
+       * lib/gcov.exp: Support new argument for run-gcov function.
+
 2016-08-12  Martin Liska  <mliska@suse.cz>
 
        PR gcov-profile/35590
diff --git a/gcc/testsuite/g++.dg/gcov/gcov-16.C b/gcc/testsuite/g++.dg/gcov/gcov-16.C
new file mode 100644 (file)
index 0000000..f09d406
--- /dev/null
@@ -0,0 +1,10 @@
+// PR gcov-profile/64634
+// { dg-options "-fprofile-arcs -ftest-coverage" }
+// { dg-do run { target native } }
+
+int main()
+{
+  return 0;   /* count(#####) */
+}
+
+// { dg-final { run-gcov remove-gcda gcov-16.C } }
index dfc1301cd330e381b880804296ef060d2d97c212..02bc6b92c144e809296a1fd6424a477c8acc586f 100644 (file)
 
 global GCOV
 
+#
+# clean-gcov-file -- delete a working file the compiler creates for gcov
+#
+# TESTCASE is the name of the test.
+# SUFFIX is file suffix
+
+proc clean-gcov-file { testcase suffix } {
+    set basename [file tail $testcase]
+    set base [file rootname $basename]
+    remote_file host delete $base.$suffix
+}
+
 #
 # clean-gcov -- delete the working files the compiler creates for gcov
 #
 # TESTCASE is the name of the test.
 #
 proc clean-gcov { testcase } {
-    set basename [file tail $testcase]
-    set base [file rootname $basename]
-    remote_file host delete $base.gcno $base.gcda \
-       $basename.gcov $base.h.gcov
+    clean-gcov-file $testcase "gcno"
+    clean-gcov-file $testcase "gcda"
+    clean-gcov-file $testcase "gcov"
+    clean-gcov-file $testcase "h.gcov"
 }
 
 #
@@ -305,6 +317,7 @@ proc run-gcov { args } {
     set gcov_verify_branches 0
     set gcov_verify_lines 1
     set gcov_verify_intermediate 0
+    set gcov_remove_gcda 0
     set xfailed 0
 
     foreach a $args {
@@ -317,6 +330,8 @@ proc run-gcov { args } {
          set gcov_verify_calls 0
          set gcov_verify_branches 0
          set gcov_verify_lines 0
+       } elseif { $a == "remove-gcda" } {
+         set gcov_remove_gcda 1
        } elseif { $gcov_args == "" } {
            set gcov_args $a
        } else {
@@ -332,6 +347,11 @@ proc run-gcov { args } {
     # Extract the test file name from the arguments.
     set testcase [lindex $gcov_args end]
 
+    if { $gcov_remove_gcda } {
+       verbose "Removing $testcase.gcda"
+       clean-gcov-file $testcase "gcda"
+    }
+
     verbose "Running $GCOV $testcase" 2
     set testcase [remote_download host $testcase]
     set result [remote_exec host $GCOV $gcov_args]