зеркало из https://github.com/microsoft/clang-1.git
Make clang emit linkage names in debug info for subprograms when coverage info
is enabled. Also add a new -test-coverage cc1 flag which makes testing coverage possible and add our first clang-side coverage test. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177470 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
2110350909
Коммит
f2b5e07072
|
@ -155,6 +155,8 @@ def coverage_function_names_in_data : Flag<["-"], "coverage-function-names-in-da
|
|||
HelpText<"Emit function names in .gcda files.">;
|
||||
def coverage_version_EQ : Joined<["-"], "coverage-version=">,
|
||||
HelpText<"Four-byte version string for gcov files.">;
|
||||
def test_coverage : Flag<["-"], "test-coverage">,
|
||||
HelpText<"Do not generate coverage files or remove coverage changes from IR">;
|
||||
def fuse_register_sized_bitfield_access: Flag<["-"], "fuse-register-sized-bitfield-access">,
|
||||
HelpText<"Use register sized accesses to bit-fields, when possible.">;
|
||||
def relaxed_aliasing : Flag<["-"], "relaxed-aliasing">,
|
||||
|
|
|
@ -42,6 +42,7 @@ CODEGENOPT(DisableLLVMOpts , 1, 0) ///< Don't run any optimizations, for use i
|
|||
///< getting .bc files that correspond to the
|
||||
///< internal state before optimizations are
|
||||
///< done.
|
||||
CODEGENOPT(DisableGCov , 1, 0) ///< Don't run the GCov pass, for testing.
|
||||
CODEGENOPT(DisableRedZone , 1, 0) ///< Set when -mno-red-zone is enabled.
|
||||
CODEGENOPT(DisableTailCalls , 1, 0) ///< Do not emit tail calls.
|
||||
CODEGENOPT(EmitDeclMetadata , 1, 0) ///< Emit special metadata indicating what
|
||||
|
|
|
@ -302,7 +302,8 @@ void EmitAssemblyHelper::CreatePasses(TargetMachine *TM) {
|
|||
// Set up the per-module pass manager.
|
||||
PassManager *MPM = getPerModulePasses(TM);
|
||||
|
||||
if (CodeGenOpts.EmitGcovArcs || CodeGenOpts.EmitGcovNotes) {
|
||||
if (!CodeGenOpts.DisableGCov &&
|
||||
(CodeGenOpts.EmitGcovArcs || CodeGenOpts.EmitGcovNotes)) {
|
||||
// Not using 'GCOVOptions::getDefault' allows us to avoid exiting if
|
||||
// LLVM's -default-gcov-version flag is set to something invalid.
|
||||
GCOVOptions Options;
|
||||
|
|
|
@ -2224,13 +2224,18 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, QualType FnType,
|
|||
}
|
||||
}
|
||||
Name = getFunctionName(FD);
|
||||
// Use mangled name as linkage name for c/c++ functions.
|
||||
// Use mangled name as linkage name for C/C++ functions.
|
||||
if (FD->hasPrototype()) {
|
||||
LinkageName = CGM.getMangledName(GD);
|
||||
Flags |= llvm::DIDescriptor::FlagPrototyped;
|
||||
}
|
||||
// No need to replicate the linkage name if it isn't different from the
|
||||
// subprogram name, no need to have it at all unless coverage is enabled or
|
||||
// debug is set to more than just line tables.
|
||||
if (LinkageName == Name ||
|
||||
CGM.getCodeGenOpts().getDebugInfo() <= CodeGenOptions::DebugLineTablesOnly)
|
||||
(!CGM.getCodeGenOpts().EmitGcovArcs &&
|
||||
!CGM.getCodeGenOpts().EmitGcovNotes &&
|
||||
CGM.getCodeGenOpts().getDebugInfo() <= CodeGenOptions::DebugLineTablesOnly))
|
||||
LinkageName = StringRef();
|
||||
|
||||
if (CGM.getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo) {
|
||||
|
|
|
@ -380,6 +380,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
Opts.VerifyModule = !Args.hasArg(OPT_disable_llvm_verifier);
|
||||
Opts.SanitizeRecover = !Args.hasArg(OPT_fno_sanitize_recover);
|
||||
|
||||
Opts.DisableGCov = Args.hasArg(OPT_test_coverage);
|
||||
Opts.EmitGcovArcs = Args.hasArg(OPT_femit_coverage_data);
|
||||
Opts.EmitGcovNotes = Args.hasArg(OPT_femit_coverage_notes);
|
||||
if (Opts.EmitGcovArcs || Opts.EmitGcovNotes) {
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
// RUN: %clang_cc1 %s -emit-llvm -o - -test-coverage -femit-coverage-notes | FileCheck %s
|
||||
|
||||
extern "C" void test_name1() {}
|
||||
void test_name2() {}
|
||||
|
||||
// CHECK: metadata !"test_name1", metadata !"test_name1", metadata !"",{{.*}}DW_TAG_subprogram
|
||||
// CHECK: metadata !"test_name2", metadata !"test_name2", metadata !"_Z10test_name2v",{{.*}}DW_TAG_subprogram
|
Загрузка…
Ссылка в новой задаче