r198655 - Implement a new -fstandalone-debug option. rdar://problem/15685848

dblaikie at gmail.com dblaikie at gmail.com
Tue Jan 7 18:53:40 PST 2014


On Mon Jan 06 2014 at 5:25:57 PM, Adrian Prantl <aprantl at apple.com> wrote:

> Author: adrian
> Date: Mon Jan  6 19:19:08 2014
> New Revision: 198655
>
> URL: http://llvm.org/viewvc/llvm-project?rev=198655&view=rev
> Log:
> Implement a new -fstandalone-debug option. rdar://problem/15685848
> It controls everything that -flimit-debug-info used to, plus the
> vtable type optimization. The old -fno-limit-debug-info option is now an
> alias to -fstandalone-debug and vice versa.
>
> Standalone is the default on Darwin until dtrace is updated to work with
> non-standalone debug info (rdar://problem/15758808).
>
> Note: I kept the LimitedDebugInfo name in CodeGenOptions::DebugInfoKind
> because NoStandaloneDebugInfo sounded even more confusing.
>
> Added:
>     cfe/trunk/test/CodeGenCXX/debug-info-vtable-optzn.cpp
> Modified:
>     cfe/trunk/docs/tools/clang.pod
>     cfe/trunk/include/clang/Driver/Options.td
>     cfe/trunk/include/clang/Frontend/CodeGenOptions.h
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/lib/Driver/Tools.cpp
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-class-limited.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-class-nolimit.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-method2.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-pubtypes.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp
>
> Modified: cfe/trunk/docs/tools/clang.pod
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/tools/
> clang.pod?rev=198655&r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/docs/tools/clang.pod (original)
> +++ cfe/trunk/docs/tools/clang.pod Mon Jan  6 19:19:08 2014
> @@ -312,12 +312,19 @@ Currently equivalent to B<-O3>
>  Generate debug information.  Note that Clang debug information works best
> at
>  B<-O0>.
>
> -=item B<-flimit-debug-info> B<-fno-limit-debug-info>
> +=item B<-fstandalone-debug> B<-fno-standalone-debug>
>
> -By default Clang does not emit type definitions for types that are not
> -needed by the module and could be replaced with a forward
> -declaration. By specifying B<-fno-limit-debug-info> this optimization
> -can be turned off. Note that Clang will never emit type information
> +Clang supports a number of optimizations to reduce the size of debug
> +information in the binary. They work based on the assumption that the
> +debug type information can be spread out over multiple compilation
> +units.  For instance, Clang will not emit type definitions for types
> +that are not needed by a module and could be replaced with a forward
> +declaration.  Further, Clang will only emit type info for a dynamic
> +C++ class in the module that contains the vtable for the class.
> +
> +The B<-fstandalone-debug> option turns off these optimizations.  This
> +is useful when working with 3rd-party libraries that don't come with
> +debug information.  Note that Clang will never emit type information
>  for types that are not referenced at all by the program.
>
>  =item B<-fexceptions>
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Driver/Options.td?rev=198655&r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Mon Jan  6 19:19:08 2014
> @@ -559,8 +559,6 @@ def finstrument_functions : Flag<["-"],
>  def fkeep_inline_functions : Flag<["-"], "fkeep-inline-functions">,
> Group<clang_ignored_f_Group>;
>  def flat__namespace : Flag<["-"], "flat_namespace">;
>  def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">,
> Group<f_Group>;
> -def flimit_debug_info : Flag<["-"], "flimit-debug-info">, Group<f_Group>,
> Flags<[CC1Option]>,
> -  HelpText<"Limit debug information produced to reduce size of debug
> binary">;
>  def flimited_precision_EQ : Joined<["-"], "flimited-precision=">,
> Group<f_Group>;
>  def flto : Flag<["-"], "flto">, Group<f_Group>;
>  def fno_lto : Flag<["-"], "fno-lto">, Group<f_Group>;
> @@ -654,8 +652,6 @@ def fno_inline : Flag<["-"], "fno-inline
>  def fno_keep_inline_functions : Flag<["-"], "fno-keep-inline-functions">,
> Group<clang_ignored_f_Group>;
>  def fno_lax_vector_conversions : Flag<["-"],
> "fno-lax-vector-conversions">, Group<f_Group>,
>    HelpText<"Disallow implicit conversions between vectors with a
> different number of elements or different element types">,
> Flags<[CC1Option]>;
> -def fno_limit_debug_info : Flag<["-"], "fno-limit-debug-info">,
> Group<f_Group>, Flags<[CC1Option]>,
> -  HelpText<"Do not limit debug information produced to reduce size of
> debug binary">;
>  def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">,
> Group<f_Group>,
>      Flags<[CC1Option]>, HelpText<"Disallow merging of constants">;
>  def fno_modules : Flag <["-"], "fno-modules">, Group<f_Group>,
> @@ -783,6 +779,12 @@ def fno_signed_char : Flag<["-"], "fno-s
>  def fsplit_stack : Flag<["-"], "fsplit-stack">, Group<f_Group>;
>  def fstack_protector_all : Flag<["-"], "fstack-protector-all">,
> Group<f_Group>;
>  def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>;
> +def fstandalone_debug : Flag<["-"], "fstandalone-debug">, Group<f_Group>,
> Flags<[CC1Option]>,
> +  HelpText<"Emit full debug info for all types used by the program">;
> +def fno_standalone_debug : Flag<["-"], "fno-standalone-debug">,
> Group<f_Group>, Flags<[CC1Option]>,
> +  HelpText<"Limit debug information produced to reduce size of debug
> binary">;
> +def flimit_debug_info : Flag<["-"], "flimit-debug-info">,
> Alias<fno_standalone_debug>;
> +def fno_limit_debug_info : Flag<["-"], "fno-limit-debug-info">,
> Alias<fstandalone_debug>;
>  def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group<f_Group>;
>  def fstrict_enums : Flag<["-"], "fstrict-enums">, Group<f_Group>,
> Flags<[CC1Option]>,
>    HelpText<"Enable optimizations based on the strict definition of an
> enum's "
>
> Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Frontend/CodeGenOptions.h?rev=198655&r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Frontend/CodeGenOptions.h (original)
> +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.h Mon Jan  6 19:19:08
> 2014
> @@ -50,12 +50,20 @@ public:
>    };
>
>    enum DebugInfoKind {
> -    NoDebugInfo,          // Don't generate debug info.
> -    DebugLineTablesOnly,  // Emit only debug info necessary for generating
> -                          // line number tables (-gline-tables-only).
> -    LimitedDebugInfo,     // Limit generated debug info to reduce size
> -                          // (-flimit-debug-info).
> -    FullDebugInfo         // Generate complete debug info.
> +    NoDebugInfo,          /// Don't generate debug info.
> +
> +    DebugLineTablesOnly,  /// Emit only debug info necessary for
> generating
> +                          /// line number tables (-gline-tables-only).
> +
> +    LimitedDebugInfo,     /// Limit generated debug info to reduce size
> +                          /// (-fno-standalone-debug).


Probably useful for this comment to describe the principle used here, then,
optionally, list the current applications of that principle. (eg:
"LimitedDebugInfo": Emit declarations for types known to have their
definitions emitted in other translation units.)


> This emits
> +                          /// forward decls for types that could be
> +                          /// replaced with forward decls in the source
> +                          /// code. For dynamic C++ classes type info
> +                          /// is only emitted int the module that
> +                          /// contains the classe's vtable.
> +
> +    FullDebugInfo         /// Generate complete debug info.
>    };
>
>    enum TLSModel {
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/
> CGDebugInfo.cpp?rev=198655&r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Jan  6 19:19:08 2014
> @@ -1464,13 +1464,13 @@ llvm::DIType CGDebugInfo::CreateType(con
>    // declaration. The completeType, completeRequiredType, and
> completeClassData
>    // callbacks will handle promoting the declaration to a definition.
>    if (T ||
> +      // Under -flimit-debug-info:
>        (DebugKind <= CodeGenOptions::LimitedDebugInfo &&
> -       // Under -flimit-debug-info, emit only a declaration unless the
> type is
> -       // required to be complete.
> -       !RD->isCompleteDefinitionRequired() &&
> CGM.getLangOpts().CPlusPlus) ||
> -      // If the class is dynamic, only emit a declaration. A definition
> will be
> -      // emitted whenever the vtable is emitted.
> -      (CXXDecl && CXXDecl->hasDefinition() && CXXDecl->isDynamicClass()))
> {
> +       // Emit only a forward declaration unless the type is required.
> +       ((!RD->isCompleteDefinitionRequired() &&
> CGM.getLangOpts().CPlusPlus) ||
> +        // If the class is dynamic, only emit a declaration. A definition
> will be
> +        // emitted whenever the vtable is emitted.
> +        (CXXDecl && CXXDecl->hasDefinition() &&
> CXXDecl->isDynamicClass())))) {
>      llvm::DIDescriptor FDContext =
>        getContextDescriptor(cast<Decl>(RD->getDeclContext()));
>      if (!T)
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/
> Tools.cpp?rev=198655&r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Jan  6 19:19:08 2014
> @@ -2945,8 +2945,8 @@ void Clang::ConstructJob(Compilation &C,
>    // Forward -f (flag) options which we can pass directly.
>    Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
>    Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
> -  Args.AddLastArg(CmdArgs, options::OPT_flimit_debug_info);
> -  Args.AddLastArg(CmdArgs, options::OPT_fno_limit_debug_info);
> +  Args.AddLastArg(CmdArgs, options::OPT_fstandalone_debug);
> +  Args.AddLastArg(CmdArgs, options::OPT_fno_standalone_debug);
>    Args.AddLastArg(CmdArgs, options::OPT_fno_operator_names);
>    // AltiVec language extensions aren't relevant for assembling.
>    if (!isa<PreprocessJobAction>(JA) ||
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/
> Frontend/CompilerInvocation.cpp?rev=198655&r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Jan  6 19:19:08 2014
> @@ -296,7 +296,8 @@ static void ParseCommentArgs(CommentOpti
>  }
>
>  static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
> InputKind IK,
> -                             DiagnosticsEngine &Diags) {
> +                             DiagnosticsEngine &Diags,
> +                             const TargetOptions &TargetOpts) {
>    using namespace options;
>    bool Success = true;
>
> @@ -323,10 +324,16 @@ static bool ParseCodeGenArgs(CodeGenOpti
>      Opts.setDebugInfo(CodeGenOptions::DebugLineTablesOnly);
>    } else if (Args.hasArg(OPT_g_Flag) || Args.hasArg(OPT_gdwarf_2) ||
>               Args.hasArg(OPT_gdwarf_3) || Args.hasArg(OPT_gdwarf_4)) {
> -    if (Args.hasFlag(OPT_flimit_debug_info, OPT_fno_limit_debug_info,
> true))
> -      Opts.setDebugInfo(CodeGenOptions::LimitedDebugInfo);
> -    else
> +    bool Default = false;
> +    // Until dtrace (via CTF) can deal with distributed debug info,
> +    // Darwin defaults to standalone/full debug info.
> +    if (llvm::Triple(TargetOpts.Triple).isOSDarwin())
> +      Default = true;
> +
> +    if (Args.hasFlag(OPT_fstandalone_debug, OPT_fno_standalone_debug,
> Default))
>        Opts.setDebugInfo(CodeGenOptions::FullDebugInfo);
> +    else
> +      Opts.setDebugInfo(CodeGenOptions::LimitedDebugInfo);
>    }
>    Opts.DebugColumnInfo = Args.hasArg(OPT_dwarf_column_info);
>    Opts.SplitDwarfFile = Args.getLastArgValue(OPT_split_dwarf_file);
> @@ -1662,8 +1669,9 @@ bool CompilerInvocation::CreateFromArgs(
>    ParseFileSystemArgs(Res.getFileSystemOpts(), *Args);
>    // FIXME: We shouldn't have to pass the DashX option around here
>    InputKind DashX = ParseFrontendArgs(Res.getFrontendOpts(), *Args,
> Diags);
> -  Success = ParseCodeGenArgs(Res.getCodeGenOpts(), *Args, DashX, Diags)
> -            && Success;
> +  ParseTargetArgs(Res.getTargetOpts(), *Args);
> +  Success = ParseCodeGenArgs(Res.getCodeGenOpts(), *Args, DashX, Diags,
> +                             Res.getTargetOpts()) && Success;
>    ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), *Args);
>    if (DashX != IK_AST && DashX != IK_LLVM_IR) {
>      ParseLangArgs(*Res.getLangOpts(), *Args, DashX, Diags);
> @@ -1678,8 +1686,6 @@ bool CompilerInvocation::CreateFromArgs(
>    ParsePreprocessorArgs(Res.getPreprocessorOpts(), *Args, FileMgr,
> Diags);
>    ParsePreprocessorOutputArgs(Res.getPreprocessorOutputOpts(), *Args,
>                                Res.getFrontendOpts().ProgramAction);
> -  ParseTargetArgs(Res.getTargetOpts(), *Args);
> -
>    return Success;
>  }
>
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-class-limited.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-class-limited.cpp?rev=198655&r1=
> 198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-class-limited.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-class-limited.cpp Mon Jan  6
> 19:19:08 2014
> @@ -1,4 +1,4 @@
> -// RUN: %clang -emit-llvm -g -S %s -o - | FileCheck %s
> +// RUN: %clang -emit-llvm -fno-standalone-debug -g -S %s -o - | FileCheck
> %s
>
>  namespace PR16214_1 {
>  // CHECK-DAG: [ DW_TAG_structure_type ] [foo] [line [[@LINE+1]], {{.*}}
> [def]
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-class-nolimit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-class-nolimit.cpp?rev=198655&r1=
> 198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-class-nolimit.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-class-nolimit.cpp Mon Jan  6
> 19:19:08 2014
> @@ -1,4 +1,6 @@
> -// RUN: %clang_cc1 -triple x86_64-unk-unk -fno-limit-debug-info -o -
> -emit-llvm -g %s | FileCheck %s
> +// RUN: %clang_cc1 -triple x86_64-unk-unk -fstandalone-debug -o -
> -emit-llvm -g %s | FileCheck %s
> +// On Darwin, this should be the default:
> +// RUN: %clang_cc1 -triple x86_64-apple-darwin -o - -emit-llvm -g %s |
> FileCheck %s
>
>  namespace rdar14101097_1 { // see also PR16214
>  // Check that we emit debug info for the definition of a struct if the
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-dup-fwd-decl.cpp?rev=198655&r1=198654&
> r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp Mon Jan  6
> 19:19:08 2014
> @@ -1,4 +1,4 @@
> -// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-apple-darwin
> -fno-limit-debug-info %s -o - | FileCheck %s
> +// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-apple-darwin
> -fstandalone-debug %s -o - | FileCheck %s
>
>  class Test
>  {
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-method2.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-method2.cpp?rev=198655&r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-method2.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-method2.cpp Mon Jan  6 19:19:08
> 2014
> @@ -1,4 +1,4 @@
> -// RUN: %clang_cc1 -flimit-debug-info -x c++ -g -S -emit-llvm < %s |
> FileCheck %s
> +// RUN: %clang_cc1 -fno-standalone-debug -x c++ -g -S -emit-llvm < %s |
> FileCheck %s
>  // rdar://10336845
>  // Preserve type qualifiers in -flimit-debug-info mode.
>
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-namespace.cpp?rev=198655&r1=
> 198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-namespace.cpp Mon Jan  6
> 19:19:08 2014
> @@ -1,6 +1,6 @@
> -// RUN: %clang -g -S -emit-llvm %s -o - | FileCheck %s
> -// RUN: %clang -g -gline-tables-only -S -emit-llvm %s -o - | FileCheck
> -check-prefix=CHECK-GMLT %s
> -// RUN: %clang -g -fno-limit-debug-info -S -emit-llvm %s -o - | FileCheck
> -check-prefix=CHECK-NOLIMIT %s
> +// RUN: %clang -g -fno-standalone-debug -S -emit-llvm %s -o - | FileCheck
> %s
> +// RUN: %clang -g -gline-tables-only    -S -emit-llvm %s -o - | FileCheck
> -check-prefix=CHECK-GMLT %s
> +// RUN: %clang -g -fstandalone-debug    -S -emit-llvm %s -o - | FileCheck
> -check-prefix=CHECK-NOLIMIT %s
>
>  namespace A {
>  #line 1 "foo.cpp"
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-pubtypes.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-pubtypes.cpp?rev=198655&r1=
> 198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-pubtypes.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-pubtypes.cpp Mon Jan  6 19:19:08
> 2014
> @@ -1,5 +1,5 @@
>  // REQUIRES: x86-registered-target
> -// RUN: %clang_cc1 -triple x86_64-apple-darwin10  -g
> -fno-limit-debug-info -S -mllvm -generate-dwarf-pub-sections=Enable %s -o
> - | FileCheck %s
> +// RUN: %clang_cc1 -triple x86_64-apple-darwin10  -g -fstandalone-debug
> -S -mllvm -generate-dwarf-pub-sections=Enable %s -o - | FileCheck %s
>
>  // FIXME: This testcase shouldn't rely on assembly emission.
>  //CHECK: Lpubtypes_begin[[SECNUM:[0-9]:]]
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-template-limit.cpp?rev=198655&
> r1=198654&r2=198655&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-template-limit.cpp Mon Jan  6
> 19:19:08 2014
> @@ -1,4 +1,4 @@
> -// RUN: %clang_cc1 -emit-llvm -flimit-debug-info -cxx-abi itanium -g %s
> -o - | FileCheck %s
> +// RUN: %clang_cc1 -emit-llvm -fno-standalone-debug -cxx-abi itanium -g
> %s -o - | FileCheck %s
>
>  // Check that this pointer type is TC<int>
>  // CHECK: ![[LINE:[0-9]+]] = {{.*}}"TC<int>", {{.*}} metadata
> !"_ZTS2TCIiE"} ; [ DW_TAG_class_type ]
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-template-member.cpp?rev=198655&r1=198654&r2=198655&
> view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-template-member.cpp Mon Jan  6
> 19:19:08 2014
> @@ -1,4 +1,4 @@
> -// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-apple-darwin %s -o - |
> FileCheck %s
> +// RUN: %clang_cc1 -emit-llvm -g -fno-standalone-debug -triple
> x86_64-apple-darwin %s -o - | FileCheck %s
>
>  struct MyClass {
>    template <int i> int add(int j) {
>
> Added: cfe/trunk/test/CodeGenCXX/debug-info-vtable-optzn.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenCXX/debug-info-vtable-optzn.cpp?rev=198655&view=auto
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenCXX/debug-info-vtable-optzn.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-vtable-optzn.cpp Mon Jan  6
> 19:19:08 2014
> @@ -0,0 +1,21 @@
> +// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-apple-darwin %s -o - |
> FileCheck %s
> +//
> +// This tests that the "emit debug info for a C++ class only in the
> +// module that has its vtable" optimization is disabled by default on
> +// Darwin.
> +//
> +// CHECK: [ DW_TAG_member ] [lost]
> +class A
> +{
> +  virtual bool f() = 0;
> +  int lost;
> +};
> +
> +class B : public A
> +{
> +  B *g();
> +};
> +
> +B *B::g() {
> +  return this;
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140108/246584e3/attachment.html>


More information about the cfe-commits mailing list