mirror of
https://github.com/intel/llvm.git
synced 2026-01-17 06:40:01 +08:00
[clang] Remove -g[no-]-* bool flags from g_Group (#162750)
There are four uses of BoolGOption, and all of them are essentially debug info feature flags, which I believe should not the enablement or disablement of all debug info emission. `OPT_g_group` is used to control the debug info level here: https://github.com/llvm/llvm-project/blob/main/clang/lib/Driver/ToolChains/Clang.cpp#L4387 This doesn't cause any test failures, and seems like the right behavior for all four flags: * -g[no-]flag-base * -g[no-]inline-line-tables * -g[no-]key-instructions * -g[no-]structor-decl-linkage-names None of these, even in the positive form, should enable debug info emission. Fixes #162747
This commit is contained in:
@@ -545,15 +545,16 @@ multiclass BoolFOption<string flag_base, KeyPathAndMacro kpm,
|
||||
Group<f_Group>;
|
||||
}
|
||||
|
||||
// Creates a BoolOption where both of the flags are prefixed with "g" and have
|
||||
// the Group<g_Group>.
|
||||
// Creates a BoolOption where both of the flags are prefixed with "g".
|
||||
// Does *not* map to g_Group, because that is reserved for flags that are
|
||||
// intended to enable (or disable) debug info, which is not appropriate for a
|
||||
// negative boolean flag (-gno-${feature}).
|
||||
// Used for -cc1 frontend options. Driver-only options do not map to
|
||||
// CompilerInvocation.
|
||||
multiclass BoolGOption<string flag_base, KeyPathAndMacro kpm,
|
||||
Default default, FlagDef flag1, FlagDef flag2,
|
||||
BothFlags both = BothFlags<[]>> {
|
||||
defm NAME : BoolOption<"g", flag_base, kpm, default, flag1, flag2, both>,
|
||||
Group<g_Group>;
|
||||
defm NAME : BoolOption<"g", flag_base, kpm, default, flag1, flag2, both>;
|
||||
}
|
||||
|
||||
multiclass BoolMOption<string flag_base, KeyPathAndMacro kpm,
|
||||
@@ -4845,8 +4846,7 @@ defm structor_decl_linkage_names
|
||||
NegFlag<SetFalse>,
|
||||
PosFlag<SetTrue, [], [],
|
||||
"Attach linkage names to C++ constructor/destructor "
|
||||
"declarations in DWARF."
|
||||
"Implies -g.">,
|
||||
"declarations in DWARF.">,
|
||||
BothFlags<[], [ClangOption, CLOption, CC1Option]>>,
|
||||
DocBrief<[{On some ABIs (e.g., Itanium), constructors and destructors may have multiple variants. Historically, when generating DWARF, Clang did not attach ``DW_AT_linkage_name`` to structor DIEs because there were multiple possible manglings (depending on the structor variant) that could be used. With ``-gstructor-decl-linkage-names``, for ABIs with structor variants, we attach a "unified" mangled name to structor declarations DIEs which debuggers can use to look up all the definitions for a structor declaration. E.g., a "unified" mangled name ``_ZN3FooC4Ev`` may have multiple definitions associated with it such as ``_ZN3FooC1Ev`` and ``_ZN3FooC2Ev``.
|
||||
|
||||
@@ -4855,7 +4855,7 @@ defm key_instructions : BoolGOption<"key-instructions",
|
||||
CodeGenOpts<"DebugKeyInstructions">, DefaultFalse,
|
||||
NegFlag<SetFalse>, PosFlag<SetTrue, [], [],
|
||||
"Enable Key Instructions, which reduces the jumpiness of debug stepping in optimized C/C++ code"
|
||||
" in some debuggers. DWARF only. Implies -g.">,
|
||||
" in some debuggers. DWARF only.">,
|
||||
BothFlags<[], [ClangOption, CLOption, CC1Option]>>;
|
||||
def headerpad__max__install__names : Joined<["-"], "headerpad_max_install_names">;
|
||||
def help : Flag<["-", "--"], "help">,
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
// RUN: %clang -### -target x86_64 -c -gdwarf -gkey-instructions %s 2>&1 | FileCheck %s --check-prefixes=KEY-INSTRUCTIONS
|
||||
// RUN: %clang -### -target x86_64 -c -gdwarf -gno-key-instructions %s 2>&1 | FileCheck %s --check-prefixes=NO-KEY-INSTRUCTIONS
|
||||
// RUN: %clang -### -target x86_64 -c -gno-key-instructions %s 2>&1 | FileCheck %s --check-prefixes=NO-DEBUG
|
||||
|
||||
//// Help.
|
||||
// RUN %clang --help | FileCheck %s --check-prefix=HELP
|
||||
// HELP: -gkey-instructions Enable Key Instructions, which reduces the jumpiness of debug stepping in optimized C/C++ code in some debuggers. DWARF only. Implies -g.
|
||||
// HELP: -gkey-instructions Enable Key Instructions, which reduces the jumpiness of debug stepping in optimized C/C++ code in some debuggers. DWARF only.
|
||||
|
||||
// KEY-INSTRUCTIONS: "-gkey-instructions"
|
||||
// NO-KEY-INSTRUCTIONS-NOT: key-instructions
|
||||
// NO-DEBUG-NOT: debug-info-kind
|
||||
// NO-DEBUG-NOT: dwarf
|
||||
|
||||
//// Help hidden: flag should not be visible.
|
||||
// RUN: %clang --help | FileCheck %s --check-prefix=HELP
|
||||
|
||||
@@ -268,11 +268,11 @@
|
||||
// RUN: %clang -### -c %s 2>&1 | FileCheck -check-prefix=NORNGBSE %s
|
||||
// RUN: %clang -### -c -fdebug-ranges-base-address -fno-debug-ranges-base-address %s 2>&1 | FileCheck -check-prefix=NORNGBSE %s
|
||||
//
|
||||
// RUN: %clang -### -c -gomit-unreferenced-methods -fno-standalone-debug %s 2>&1 | FileCheck -check-prefix=INCTYPES %s
|
||||
// RUN: %clang -### -c -g -gomit-unreferenced-methods -fno-standalone-debug %s 2>&1 | FileCheck -check-prefix=INCTYPES %s
|
||||
// RUN: %clang -### -c %s 2>&1 | FileCheck -check-prefix=NOINCTYPES %s
|
||||
// RUN: %clang -### -c -gomit-unreferenced-methods -fdebug-types-section -target x86_64-unknown-linux %s 2>&1 \
|
||||
// RUN: %clang -### -c -g -gomit-unreferenced-methods -fdebug-types-section -target x86_64-unknown-linux %s 2>&1 \
|
||||
// RUN: | FileCheck -check-prefix=NOINCTYPES %s
|
||||
// RUN: %clang -### -c -gomit-unreferenced-methods -fstandalone-debug %s 2>&1 | FileCheck -check-prefix=NOINCTYPES %s
|
||||
// RUN: %clang -### -c -g -gomit-unreferenced-methods -fstandalone-debug %s 2>&1 | FileCheck -check-prefix=NOINCTYPES %s
|
||||
//
|
||||
// RUN: %clang -### -c -glldb %s 2>&1 | FileCheck -check-prefix=NOPUB %s
|
||||
// RUN: %clang -### -c -glldb -gno-pubnames %s 2>&1 | FileCheck -check-prefix=NOPUB %s
|
||||
|
||||
Reference in New Issue
Block a user