Reviewers: echristo, chandlerc, Message: Commited as r155697, thank you!
http://codereview.appspot.com/6114059/diff/1/lib/CodeGen/CGClass.cpp File lib/CodeGen/CGClass.cpp (right): http://codereview.appspot.com/6114059/diff/1/lib/CodeGen/CGClass.cpp#newcode1231 lib/CodeGen/CGClass.cpp:1231: CodeGenOptions::LimitedDebugInfo) { On 2012/04/26 17:10:54, chandlerc wrote: > Style nit: wrap this in parens if you want unusual indentation like this... Done (moved CGM.getCodeGenOpts()... to next line). http://codereview.appspot.com/6114059/diff/1/lib/CodeGen/CGExprScalar.cpp File lib/CodeGen/CGExprScalar.cpp (right): http://codereview.appspot.com/6114059/diff/1/lib/CodeGen/CGExprScalar.cpp#newcode805 lib/CodeGen/CGExprScalar.cpp:805: CodeGenOptions::LimitedDebugInfo) { On 2012/04/26 17:10:54, chandlerc wrote: > Same comment here. ditto http://codereview.appspot.com/6114059/diff/1/lib/CodeGen/CGExprScalar.cpp#newcode809 lib/CodeGen/CGExprScalar.cpp:809: DI->getOrCreateRecordType(PTy->getPointeeType(), On 2012/04/26 17:10:54, chandlerc wrote: > Please try to avoid trimming trailing whitespace from lines you're not > changing... I only see the two here in this file, but wanted to mention it for > future reference. Ack. http://codereview.appspot.com/6114059/diff/1/lib/Frontend/CompilerInvocation.cpp File lib/Frontend/CompilerInvocation.cpp (right): http://codereview.appspot.com/6114059/diff/1/lib/Frontend/CompilerInvocation.cpp#newcode1100 lib/Frontend/CompilerInvocation.cpp:1100: Args.hasArg(OPT_flimit_debug_info)) On 2012/04/26 17:10:54, chandlerc wrote: > There is a helper designed for this pattern: Args.hasFlag Done. Description: This patch follows clattner's advice and introduces enum (instead of bool flags) that defines the size of debug info generated by Clang. This patch doesn't change the behavior and is a first step to introducing -gline-tables-only flag (http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120423/056674.html). Please review this at http://codereview.appspot.com/6114059/ Affected files: M include/clang/Frontend/CodeGenOptions.h M lib/CodeGen/BackendUtil.cpp M lib/CodeGen/CGClass.cpp M lib/CodeGen/CGDebugInfo.cpp M lib/CodeGen/CGExprCXX.cpp M lib/CodeGen/CGExprScalar.cpp M lib/CodeGen/CodeGenModule.cpp M lib/Frontend/CompilerInvocation.cpp Index: include/clang/Frontend/CodeGenOptions.h =================================================================== --- include/clang/Frontend/CodeGenOptions.h (revision 155625) +++ include/clang/Frontend/CodeGenOptions.h (working copy) @@ -35,6 +35,13 @@ Mixed = 2 }; + enum DebugInfoKind { + NoDebugInfo, // Don't generate debug info. + LimitedDebugInfo, // Limit generated debug info to reduce size + // (-flimit-debug-info). + FullDebugInfo // Generate complete debug info. + }; + unsigned AsmVerbose : 1; /// -dA, -fverbose-asm. unsigned ObjCAutoRefCountExceptions : 1; /// Whether ARC should be EH-safe. unsigned CUDAIsDevice : 1; /// Set when compiling for CUDA device. @@ -42,8 +49,6 @@ unsigned CXXCtorDtorAliases: 1; /// Emit complete ctors/dtors as linker /// aliases to base ctors when possible. unsigned DataSections : 1; /// Set when -fdata-sections is enabled - unsigned DebugInfo : 1; /// Should generate debug info (-g). - unsigned LimitDebugInfo : 1; /// Limit generated debug info to reduce size. unsigned DisableFPElim : 1; /// Set when -fomit-frame-pointer is enabled. unsigned DisableLLVMOpts : 1; /// Don't run any optimizations, for use in /// getting .bc files that correspond to the @@ -127,6 +132,9 @@ /// The string to embed in debug information as the current working directory. std::string DebugCompilationDir; + /// The kind of generated debug info. + DebugInfoKind DebugInfo; + /// The string to embed in the debug information for the compile unit, if /// non-empty. std::string DwarfDebugFlags; @@ -169,8 +177,6 @@ CXAAtExit = 1; CXXCtorDtorAliases = 0; DataSections = 0; - DebugInfo = 0; - LimitDebugInfo = 0; DisableFPElim = 0; DisableLLVMOpts = 0; DisableRedZone = 0; @@ -217,6 +223,7 @@ StackRealignment = 0; StackAlignment = 0; + DebugInfo = NoDebugInfo; Inlining = NoInlining; RelocationModel = "pic"; } Index: lib/Frontend/CompilerInvocation.cpp =================================================================== --- lib/Frontend/CompilerInvocation.cpp (revision 155625) +++ lib/Frontend/CompilerInvocation.cpp (working copy) @@ -181,8 +181,17 @@ } static void CodeGenOptsToArgs(const CodeGenOptions &Opts, ToArgsList &Res) { - if (Opts.DebugInfo) - Res.push_back("-g"); + switch (Opts.DebugInfo) { + case CodeGenOptions::NoDebugInfo: + break; + case CodeGenOptions::LimitedDebugInfo: + Res.push_back("-g"); + Res.push_back("-flimit-debug-info"); + break; + case CodeGenOptions::FullDebugInfo: + Res.push_back("-g"); + break; + } if (Opts.DisableLLVMOpts) Res.push_back("-disable-llvm-optzns"); if (Opts.DisableRedZone) @@ -1083,12 +1092,17 @@ : CodeGenOptions::OnlyAlwaysInlining; // -fno-inline-functions overrides OptimizationLevel > 1. Opts.NoInline = Args.hasArg(OPT_fno_inline); - Opts.Inlining = Args.hasArg(OPT_fno_inline_functions) ? + Opts.Inlining = Args.hasArg(OPT_fno_inline_functions) ? CodeGenOptions::OnlyAlwaysInlining : Opts.Inlining; - Opts.DebugInfo = Args.hasArg(OPT_g); - Opts.LimitDebugInfo = !Args.hasArg(OPT_fno_limit_debug_info) - || Args.hasArg(OPT_flimit_debug_info); + if (Args.hasArg(OPT_g)) { + if (!Args.hasArg(OPT_fno_limit_debug_info) || + Args.hasArg(OPT_flimit_debug_info)) + Opts.DebugInfo = CodeGenOptions::LimitedDebugInfo; + else + Opts.DebugInfo = CodeGenOptions::FullDebugInfo; + } + Opts.DisableLLVMOpts = Args.hasArg(OPT_disable_llvm_optzns); Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone); Opts.ForbidGuardVariables = Args.hasArg(OPT_fforbid_guard_variables); Index: lib/CodeGen/CGExprScalar.cpp =================================================================== --- lib/CodeGen/CGExprScalar.cpp (revision 155625) +++ lib/CodeGen/CGExprScalar.cpp (working copy) @@ -798,14 +798,15 @@ return Builder.getInt(Value); } - // Emit debug info for aggregate now, if it was delayed to reduce + // Emit debug info for aggregate now, if it was delayed to reduce // debug info size. CGDebugInfo *DI = CGF.getDebugInfo(); - if (DI && CGF.CGM.getCodeGenOpts().LimitDebugInfo) { + if (DI && CGF.CGM.getCodeGenOpts().DebugInfo == + CodeGenOptions::LimitedDebugInfo) { QualType PQTy = E->getBase()->IgnoreParenImpCasts()->getType(); if (const PointerType * PTy = dyn_cast<PointerType>(PQTy)) if (FieldDecl *M = dyn_cast<FieldDecl>(E->getMemberDecl())) - DI->getOrCreateRecordType(PTy->getPointeeType(), + DI->getOrCreateRecordType(PTy->getPointeeType(), M->getParent()->getLocation()); } return EmitLoadOfLValue(E); Index: lib/CodeGen/CodeGenModule.cpp =================================================================== --- lib/CodeGen/CodeGenModule.cpp (revision 155625) +++ lib/CodeGen/CodeGenModule.cpp (working copy) @@ -110,7 +110,8 @@ // If debug info or coverage generation is enabled, create the CGDebugInfo // object. - if (CodeGenOpts.DebugInfo || CodeGenOpts.EmitGcovArcs || + if (CodeGenOpts.DebugInfo != CodeGenOptions::NoDebugInfo || + CodeGenOpts.EmitGcovArcs || CodeGenOpts.EmitGcovNotes) DebugInfo = new CGDebugInfo(*this); Index: lib/CodeGen/CGExprCXX.cpp =================================================================== --- lib/CodeGen/CGExprCXX.cpp (revision 155625) +++ lib/CodeGen/CGExprCXX.cpp (working copy) @@ -179,7 +179,7 @@ const CXXMethodDecl *MD = cast<CXXMethodDecl>(ME->getMemberDecl()); CGDebugInfo *DI = getDebugInfo(); - if (DI && CGM.getCodeGenOpts().LimitDebugInfo + if (DI && CGM.getCodeGenOpts().DebugInfo == CodeGenOptions::LimitedDebugInfo && !isa<CallExpr>(ME->getBase())) { QualType PQTy = ME->getBase()->IgnoreParenImpCasts()->getType(); if (const PointerType * PTy = dyn_cast<PointerType>(PQTy)) { Index: lib/CodeGen/CGDebugInfo.cpp =================================================================== --- lib/CodeGen/CGDebugInfo.cpp (revision 155625) +++ lib/CodeGen/CGDebugInfo.cpp (working copy) @@ -546,7 +546,7 @@ /// then emit record's fwd if debug info size reduction is enabled. llvm::DIType CGDebugInfo::CreatePointeeType(QualType PointeeTy, llvm::DIFile Unit) { - if (!CGM.getCodeGenOpts().LimitDebugInfo) + if (CGM.getCodeGenOpts().DebugInfo != CodeGenOptions::LimitedDebugInfo) return getOrCreateType(PointeeTy, Unit); // Limit debug info for the pointee type. @@ -1823,7 +1823,7 @@ StringRef RDName = RD->getName(); llvm::DIDescriptor RDContext; - if (CGM.getCodeGenOpts().LimitDebugInfo) + if (CGM.getCodeGenOpts().DebugInfo == CodeGenOptions::LimitedDebugInfo) RDContext = createContextChain(cast<Decl>(RD->getDeclContext())); else RDContext = getContextDescriptor(cast<Decl>(RD->getDeclContext())); Index: lib/CodeGen/CGClass.cpp =================================================================== --- lib/CodeGen/CGClass.cpp (revision 155625) +++ lib/CodeGen/CGClass.cpp (working copy) @@ -1227,7 +1227,8 @@ CallExpr::const_arg_iterator ArgEnd) { CGDebugInfo *DI = getDebugInfo(); - if (DI && CGM.getCodeGenOpts().LimitDebugInfo) { + if (DI && CGM.getCodeGenOpts().DebugInfo == + CodeGenOptions::LimitedDebugInfo) { // If debug info for this class has not been emitted then this is the // right time to do so. const CXXRecordDecl *Parent = D->getParent(); Index: lib/CodeGen/BackendUtil.cpp =================================================================== --- lib/CodeGen/BackendUtil.cpp (revision 155625) +++ lib/CodeGen/BackendUtil.cpp (working copy) @@ -219,7 +219,7 @@ CodeGenOpts.EmitGcovArcs, TargetTriple.isMacOSX())); - if (!CodeGenOpts.DebugInfo) + if (CodeGenOpts.DebugInfo == CodeGenOptions::NoDebugInfo) MPM->add(createStripSymbolsPass(true)); } _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
