diff options
author | Martin Liska <mliska@suse.cz> | 2018-10-03 10:30:10 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-10-03 08:30:10 +0000 |
commit | f2db46026408095de13e9b74659fd06d9c02f7f3 (patch) | |
tree | 8fa1a89d2850e78140a6a1c0472e9dd5b6b6d777 /gcc | |
parent | 784779d47117cf90c1facb844d4845ba7c97bd34 (diff) | |
download | gcc-f2db46026408095de13e9b74659fd06d9c02f7f3.zip gcc-f2db46026408095de13e9b74659fd06d9c02f7f3.tar.gz gcc-f2db46026408095de13e9b74659fd06d9c02f7f3.tar.bz2 |
Properly mark lambdas in GCOV (PR gcov-profile/86109).
2018-10-03 Martin Liska <mliska@suse.cz>
PR gcov-profile/86109
* coverage.c (coverage_begin_function): Do not
mark lambdas as artificial.
* tree-core.h (struct GTY): Remove tm_clone_flag
and introduce new lambda_function.
* tree.h (DECL_LAMBDA_FUNCTION): New macro.
2018-10-03 Martin Liska <mliska@suse.cz>
PR gcov-profile/86109
* parser.c (cp_parser_lambda_declarator_opt):
Set DECL_LAMBDA_FUNCTION for lambdas.
2018-10-03 Martin Liska <mliska@suse.cz>
PR gcov-profile/86109
* g++.dg/gcov/pr86109.C: New test.
From-SVN: r264806
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/coverage.c | 3 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gcov/pr86109.C | 16 | ||||
-rw-r--r-- | gcc/tree-core.h | 2 | ||||
-rw-r--r-- | gcc/tree.h | 4 |
8 files changed, 44 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9906789..a6e1a8e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-10-03 Martin Liska <mliska@suse.cz> + + PR gcov-profile/86109 + * coverage.c (coverage_begin_function): Do not + mark lambdas as artificial. + * tree-core.h (struct GTY): Remove tm_clone_flag + and introduce new lambda_function. + * tree.h (DECL_LAMBDA_FUNCTION): New macro. + 2018-10-02 Aaron Sawdey <acsawdey@linux.ibm.com> PR target/87474 diff --git a/gcc/coverage.c b/gcc/coverage.c index 701460c..599a3bb 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -630,7 +630,8 @@ coverage_begin_function (unsigned lineno_checksum, unsigned cfg_checksum) gcov_write_string (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl))); gcov_write_unsigned (DECL_ARTIFICIAL (current_function_decl) - && !DECL_FUNCTION_VERSIONED (current_function_decl)); + && !DECL_FUNCTION_VERSIONED (current_function_decl) + && !DECL_LAMBDA_FUNCTION (current_function_decl)); gcov_write_filename (xloc.file); gcov_write_unsigned (xloc.line); gcov_write_unsigned (xloc.column); diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fd0fb8a..53ff0eb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-10-03 Martin Liska <mliska@suse.cz> + + PR gcov-profile/86109 + * parser.c (cp_parser_lambda_declarator_opt): + Set DECL_LAMBDA_FUNCTION for lambdas. + 2018-10-02 Richard Biener <rguenther@suse.de> * name-lookup.c (check_local_shadow): Do not test DECL_FROM_INLINE. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 6696f17..a17cc3f 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -10641,6 +10641,7 @@ cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr) DECL_ARTIFICIAL (fco) = 1; /* Give the object parameter a different name. */ DECL_NAME (DECL_ARGUMENTS (fco)) = closure_identifier; + DECL_LAMBDA_FUNCTION (fco) = 1; } if (template_param_list) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce3b03b..a888b8f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-10-03 Martin Liska <mliska@suse.cz> + + PR gcov-profile/86109 + * g++.dg/gcov/pr86109.C: New test. + 2018-10-02 Marc Glisse <marc.glisse@inria.fr> * gcc.dg/tree-ssa/muldiv-1.c: New file. diff --git a/gcc/testsuite/g++.dg/gcov/pr86109.C b/gcc/testsuite/g++.dg/gcov/pr86109.C new file mode 100644 index 0000000..9052d2e --- /dev/null +++ b/gcc/testsuite/g++.dg/gcov/pr86109.C @@ -0,0 +1,16 @@ + +/* { dg-options "-fprofile-arcs -ftest-coverage -std=c++11" } */ +/* { dg-do run { target native } } */ + +int main() +{ + auto partially_uncovered_lambda = [](int i) { /* count(1) */ + if (i > 10) /* count(1) */ + return 0; /* count(1) */ + return 1; /* count(#####) */ + }; + + return partially_uncovered_lambda(20); /* count(1) */ +} + +/* { dg-final { run-gcov pr86109.C } } */ diff --git a/gcc/tree-core.h b/gcc/tree-core.h index dee27f8..cd3a2ba 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -1789,8 +1789,8 @@ struct GTY(()) tree_function_decl { unsigned pure_flag : 1; unsigned looping_const_or_pure_flag : 1; unsigned has_debug_args_flag : 1; - unsigned tm_clone_flag : 1; unsigned versioned_function : 1; + unsigned lambda_function: 1; /* No bits left. */ }; @@ -3041,6 +3041,10 @@ extern vec<tree, va_gc> **decl_debug_args_insert (tree); #define DECL_CXX_DESTRUCTOR_P(NODE)\ (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_destructor) +/* In FUNCTION_DECL, this is set if this function is a lambda function. */ +#define DECL_LAMBDA_FUNCTION(NODE) \ + (FUNCTION_DECL_CHECK (NODE)->function_decl.lambda_function) + /* In FUNCTION_DECL that represent an virtual method this is set when the method is final. */ #define DECL_FINAL_P(NODE)\ |