mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-02 08:40:26 +08:00
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
This commit is contained in:
parent
784779d471
commit
f2db460264
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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.
|
||||
|
16
gcc/testsuite/g++.dg/gcov/pr86109.C
Normal file
16
gcc/testsuite/g++.dg/gcov/pr86109.C
Normal file
@ -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 } } */
|
@ -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)\
|
||||
|
Loading…
x
Reference in New Issue
Block a user