rsanthir.quic updated this revision to Diff 349274. rsanthir.quic added a comment.
Updated Release Notes and rebased Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D102782/new/ https://reviews.llvm.org/D102782 Files: clang/docs/ReleaseNotes.rst clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp clang/test/Frontend/backend-stack-usage-diagnostic.c Index: clang/test/Frontend/backend-stack-usage-diagnostic.c =================================================================== --- /dev/null +++ clang/test/Frontend/backend-stack-usage-diagnostic.c @@ -0,0 +1,24 @@ +// RUN: %clang -Wstack-usage=0 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=WARN + +// RUN: %clang -Wno-stack-usage -Wstack-usage=0 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=WARN + +// RUN: %clang -Wstack-usage=0 -Wno-stack-usage -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=IGNORE --allow-empty + +// RUN: %clang -Wstack-usage=0 -w -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=IGNORE --allow-empty + +// RUN: %clang -Wstack-usage=3 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=WARN + +// RUN: %clang -Wstack-usage=100 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=IGNORE --allow-empty + +// WARN: warning: stack frame size of {{[0-9]+}} bytes in function 'test_square' +// IGNORE-NOT: stack frame size of {{[0-9]+}} bytes in function 'test_square' +int test_square(int num) { + return num * num; +} + Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4826,12 +4826,14 @@ D.Diag(diag::err_aix_default_altivec_abi); } - if (Arg *A = Args.getLastArg(options::OPT_Wframe_larger_than_EQ)) { - StringRef v = A->getValue(); - CmdArgs.push_back("-mllvm"); - CmdArgs.push_back(Args.MakeArgString("-warn-stack-size=" + v)); - A->claim(); - } + if (Args.hasFlag(options::OPT_Wframe_larger_than_EQ, + options::OPT_Wno_frame_larger_than, false)) + if (Arg *A = Args.getLastArg(options::OPT_Wframe_larger_than_EQ)) { + StringRef v = A->getValue(); + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back(Args.MakeArgString("-warn-stack-size=" + v)); + A->claim(); + } if (!Args.hasFlag(options::OPT_fjump_tables, options::OPT_fno_jump_tables, true)) Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2577,6 +2577,11 @@ def Wlarger_than_EQ : Joined<["-"], "Wlarger-than=">, Group<clang_ignored_f_Group>; def Wlarger_than_ : Joined<["-"], "Wlarger-than-">, Alias<Wlarger_than_EQ>; def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Group<f_Group>, Flags<[NoXarchOption]>; +def Wno_frame_larger_than : Joined<["-"], "Wno-frame-larger-than">, Group<f_Group>, Flags<[NoXarchOption]>; +def Wstack_stack_usage_EQ : Joined<["-"], "Wstack-usage=">, Flags<[NoXarchOption]>, + Alias<Wframe_larger_than_EQ>; +def Wno_stack_stack_usage : Joined<["-"], "Wno-stack-usage">, Flags<[NoXarchOption]>, + Alias<Wno_frame_larger_than>; def : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>; defm threadsafe_statics : BoolFOption<"threadsafe-statics", Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -76,6 +76,9 @@ file contains frame size information for each function defined in the source file. +- ``-Wstack-usage=<byte-size>`` warn if stack usage of user functions might + exceed <byte-size>. + Deprecated Compiler Flags -------------------------
Index: clang/test/Frontend/backend-stack-usage-diagnostic.c =================================================================== --- /dev/null +++ clang/test/Frontend/backend-stack-usage-diagnostic.c @@ -0,0 +1,24 @@ +// RUN: %clang -Wstack-usage=0 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=WARN + +// RUN: %clang -Wno-stack-usage -Wstack-usage=0 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=WARN + +// RUN: %clang -Wstack-usage=0 -Wno-stack-usage -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=IGNORE --allow-empty + +// RUN: %clang -Wstack-usage=0 -w -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=IGNORE --allow-empty + +// RUN: %clang -Wstack-usage=3 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=WARN + +// RUN: %clang -Wstack-usage=100 -o /dev/null -c %s 2> %t.err +// RUN: FileCheck < %t.err %s --check-prefix=IGNORE --allow-empty + +// WARN: warning: stack frame size of {{[0-9]+}} bytes in function 'test_square' +// IGNORE-NOT: stack frame size of {{[0-9]+}} bytes in function 'test_square' +int test_square(int num) { + return num * num; +} + Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4826,12 +4826,14 @@ D.Diag(diag::err_aix_default_altivec_abi); } - if (Arg *A = Args.getLastArg(options::OPT_Wframe_larger_than_EQ)) { - StringRef v = A->getValue(); - CmdArgs.push_back("-mllvm"); - CmdArgs.push_back(Args.MakeArgString("-warn-stack-size=" + v)); - A->claim(); - } + if (Args.hasFlag(options::OPT_Wframe_larger_than_EQ, + options::OPT_Wno_frame_larger_than, false)) + if (Arg *A = Args.getLastArg(options::OPT_Wframe_larger_than_EQ)) { + StringRef v = A->getValue(); + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back(Args.MakeArgString("-warn-stack-size=" + v)); + A->claim(); + } if (!Args.hasFlag(options::OPT_fjump_tables, options::OPT_fno_jump_tables, true)) Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2577,6 +2577,11 @@ def Wlarger_than_EQ : Joined<["-"], "Wlarger-than=">, Group<clang_ignored_f_Group>; def Wlarger_than_ : Joined<["-"], "Wlarger-than-">, Alias<Wlarger_than_EQ>; def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Group<f_Group>, Flags<[NoXarchOption]>; +def Wno_frame_larger_than : Joined<["-"], "Wno-frame-larger-than">, Group<f_Group>, Flags<[NoXarchOption]>; +def Wstack_stack_usage_EQ : Joined<["-"], "Wstack-usage=">, Flags<[NoXarchOption]>, + Alias<Wframe_larger_than_EQ>; +def Wno_stack_stack_usage : Joined<["-"], "Wno-stack-usage">, Flags<[NoXarchOption]>, + Alias<Wno_frame_larger_than>; def : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>; defm threadsafe_statics : BoolFOption<"threadsafe-statics", Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -76,6 +76,9 @@ file contains frame size information for each function defined in the source file. +- ``-Wstack-usage=<byte-size>`` warn if stack usage of user functions might + exceed <byte-size>. + Deprecated Compiler Flags -------------------------
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits