[Coverage] Do not visit artificial stmts in defaulted methods (PR39822)
authorVedant Kumar <vsk@apple.com>
Wed, 28 Nov 2018 20:48:07 +0000 (20:48 +0000)
committerVedant Kumar <vsk@apple.com>
Wed, 28 Nov 2018 20:48:07 +0000 (20:48 +0000)
commit7225a2617660a84002c64b495c1b5a5fe6c800cf
tree79b13b72f355735e62664b5efb509119ce7a6d1b
parent1742eced55a932f539e4a54b5ab2c0ec9780f456
[Coverage] Do not visit artificial stmts in defaulted methods (PR39822)

There is no reason to emit coverage mappings for artificial statements
contained within defaulted methods, as these statements are not visible
to users.

Only emit a mapping for the body of the defaulted method (clang treats
the text of the "default" keyword as the body when reporting locations).
This allows users to see how often the default method is called, but
trims down the coverage mapping by skipping visitation of the children
of the method.

The immediate motivation for this change is that the lexer's
getPreciseTokenLocEnd API cannot return the correct location when given
an artificial statement (with a somewhat made-up location) as an input.

Test by Orivej Desh!

Fixes llvm.org/PR39822.

llvm-svn: 347803
clang/lib/CodeGen/CoverageMappingGen.cpp
clang/test/CoverageMapping/default-method.cpp [new file with mode: 0644]