Chenbing.Zheng created this revision. Chenbing.Zheng added reviewers: aaron.ballman, lebedev.ri, benshi001. Chenbing.Zheng added a project: clang. Herald added subscribers: StephenFan, Anastasia. Herald added a project: All. Chenbing.Zheng requested review of this revision. Herald added subscribers: cfe-commits, jacquesguan, MaskRay.
I get a memory leak in clang's CompilerInstance::ExecuteAction, and remove -disable-free in cc1 works according to https://github.com/RadeonOpenCompute/ROCm-OpenCL-Driver/issues/13 So, I want to add option to manually control -disable-free in cc1. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D145643 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/clang_f_opts.c Index: clang/test/Driver/clang_f_opts.c =================================================================== --- clang/test/Driver/clang_f_opts.c +++ clang/test/Driver/clang_f_opts.c @@ -616,3 +616,8 @@ // CHECK-INT-OBJEMITTER-NOT: unsupported option '-fintegrated-objemitter' for target // RUN: %clang -### -fno-integrated-objemitter -target x86_64 %s 2>&1 | FileCheck -check-prefix=CHECK-NOINT-OBJEMITTER %s // CHECK-NOINT-OBJEMITTER: unsupported option '-fno-integrated-objemitter' for target + +// RUN: %clang -### -S %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-FREE %s +// RUN: %clang -### -S -fno-disable-free %s 2>&1 | FileCheck -check-prefix=CHECK-NO-DISABLE-FREE %s +// CHECK-DISABLE-FREE: "-disable-free" +// CHECK-NO-DISABLE-FREE-NOT: "-disable-free" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4981,7 +4981,7 @@ // We normally speed up the clang process a bit by skipping destructors at // exit, but when we're generating diagnostics we can rely on some of the // cleanup. - if (!C.isForDiagnostics()) + if (!Args.hasArg(options::OPT_fno_disable_free) && !C.isForDiagnostics()) CmdArgs.push_back("-disable-free"); CmdArgs.push_back("-clear-ast-before-backend"); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1564,6 +1564,8 @@ HelpText<"Discard value names in LLVM IR">, Flags<[NoXarchOption]>; def fno_discard_value_names : Flag<["-"], "fno-discard-value-names">, Group<f_clang_Group>, HelpText<"Do not discard value names in LLVM IR">, Flags<[NoXarchOption]>; +def fno_disable_free : Flag<["-"], "fno-disable-free">, Group<f_clang_Group>, + HelpText<"cancel disable-free in cc1">, Flags<[NoXarchOption]>; defm dollars_in_identifiers : BoolFOption<"dollars-in-identifiers", LangOpts<"DollarIdents">, Default<!strconcat("!", asm_preprocessor.KeyPath)>, PosFlag<SetTrue, [], "Allow">, NegFlag<SetFalse, [], "Disallow">,
Index: clang/test/Driver/clang_f_opts.c =================================================================== --- clang/test/Driver/clang_f_opts.c +++ clang/test/Driver/clang_f_opts.c @@ -616,3 +616,8 @@ // CHECK-INT-OBJEMITTER-NOT: unsupported option '-fintegrated-objemitter' for target // RUN: %clang -### -fno-integrated-objemitter -target x86_64 %s 2>&1 | FileCheck -check-prefix=CHECK-NOINT-OBJEMITTER %s // CHECK-NOINT-OBJEMITTER: unsupported option '-fno-integrated-objemitter' for target + +// RUN: %clang -### -S %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-FREE %s +// RUN: %clang -### -S -fno-disable-free %s 2>&1 | FileCheck -check-prefix=CHECK-NO-DISABLE-FREE %s +// CHECK-DISABLE-FREE: "-disable-free" +// CHECK-NO-DISABLE-FREE-NOT: "-disable-free" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4981,7 +4981,7 @@ // We normally speed up the clang process a bit by skipping destructors at // exit, but when we're generating diagnostics we can rely on some of the // cleanup. - if (!C.isForDiagnostics()) + if (!Args.hasArg(options::OPT_fno_disable_free) && !C.isForDiagnostics()) CmdArgs.push_back("-disable-free"); CmdArgs.push_back("-clear-ast-before-backend"); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1564,6 +1564,8 @@ HelpText<"Discard value names in LLVM IR">, Flags<[NoXarchOption]>; def fno_discard_value_names : Flag<["-"], "fno-discard-value-names">, Group<f_clang_Group>, HelpText<"Do not discard value names in LLVM IR">, Flags<[NoXarchOption]>; +def fno_disable_free : Flag<["-"], "fno-disable-free">, Group<f_clang_Group>, + HelpText<"cancel disable-free in cc1">, Flags<[NoXarchOption]>; defm dollars_in_identifiers : BoolFOption<"dollars-in-identifiers", LangOpts<"DollarIdents">, Default<!strconcat("!", asm_preprocessor.KeyPath)>, PosFlag<SetTrue, [], "Allow">, NegFlag<SetFalse, [], "Disallow">,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits