kda updated this revision to Diff 399937. kda added a comment. add missing files.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D117293/new/ https://reviews.llvm.org/D117293 Files: clang/include/clang/Driver/Options.td clang/test/CodeGen/attr-noundef.cpp clang/test/CodeGen/indirect-noundef.cpp clang/test/CodeGen/msan-param-retval.c compiler-rt/test/msan/noundef_analysis.cpp Index: compiler-rt/test/msan/noundef_analysis.cpp =================================================================== --- compiler-rt/test/msan/noundef_analysis.cpp +++ compiler-rt/test/msan/noundef_analysis.cpp @@ -2,6 +2,8 @@ // RUN: FileCheck %s --check-prefix=MISSED --allow-empty < %t.out // RUN: %clangxx_msan %s -Xclang -enable-noundef-analysis -mllvm -msan-eager-checks=1 -o %t && not %run %t >%t.out 2>&1 // RUN: FileCheck %s < %t.out +// RUN: %clangxx_msan %s -fsanitize-memory-param-retval -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out struct SimpleStruct { int md1; Index: clang/test/CodeGen/msan-param-retval.c =================================================================== --- clang/test/CodeGen/msan-param-retval.c +++ clang/test/CodeGen/msan-param-retval.c @@ -5,7 +5,7 @@ // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -fsanitize=memory -Xclang -enable-noundef-analysis -mllvm -msan-eager-checks -o - %s | \ // RUN: FileCheck %s --check-prefixes=NOUNDEF,EAGER // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -fsanitize=memory -fsanitize-memory-param-retval -o - %s | \ -// RUN: FileCheck %s --check-prefixes=CLEAN +// RUN: FileCheck %s --check-prefixes=NOUNDEF,EAGER // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -fsanitize=memory -Xclang -enable-noundef-analysis -fsanitize-memory-param-retval -o - %s | \ // RUN: FileCheck %s --check-prefixes=NOUNDEF,EAGER Index: clang/test/CodeGen/indirect-noundef.cpp =================================================================== --- clang/test/CodeGen/indirect-noundef.cpp +++ clang/test/CodeGen/indirect-noundef.cpp @@ -1,4 +1,9 @@ // RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -enable-noundef-analysis -o - %s | FileCheck %s +// RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -fsanitize-memory-param-retval -o - %s | FileCheck %s + +// no-sanitize-memory-param-retval does NOT conflict with enable-noundef-analysis +// RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -fno-sanitize-memory-param-retval -enable-noundef-analysis -o - %s | FileCheck %s +// RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -enable-noundef-analysis -fno-sanitize-memory-param-retval -o - %s | FileCheck %s union u1 { int val; Index: clang/test/CodeGen/attr-noundef.cpp =================================================================== --- clang/test/CodeGen/attr-noundef.cpp +++ clang/test/CodeGen/attr-noundef.cpp @@ -1,5 +1,11 @@ // RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -enable-noundef-analysis %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL // RUN: %clang -cc1 -triple aarch64-gnu-linux -x c++ -S -emit-llvm -enable-noundef-analysis %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-AARCH +// RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -fsanitize-memory-param-retval %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL +// RUN: %clang -cc1 -triple aarch64-gnu-linux -x c++ -S -emit-llvm -fsanitize-memory-param-retval %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-AARCH + +// no-sanitize-memory-param-retval does NOT conflict with enable-noundef-analysis +// RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -enable-noundef-analysis -fno-sanitize-memory-param-retval %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL +// RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -fno-sanitize-memory-param-retval -enable-noundef-analysis %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL //************ Passing structs by value // TODO: No structs may currently be marked noundef Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1670,13 +1670,12 @@ NormalizedValues<["None", "Global"]>, MarshallingInfoEnum<CodeGenOpts<"SanitizeAddressDtor">, "Global">; defm sanitize_memory_param_retval - : BoolOption<"f", "sanitize-memory-param-retval", - CodeGenOpts<"SanitizeMemoryParamRetval">, - DefaultFalse, - PosFlag<SetTrue, [CC1Option], "Enable">, NegFlag<SetFalse, [], "Disable">, - BothFlags<[], " detection of uninitialized parameters and return values">>, - Group<f_clang_Group>; -// Note: This flag was introduced when it was necessary to distinguish between + : BoolFOption<"sanitize-memory-param-retval", + CodeGenOpts<"SanitizeMemoryParamRetval">, + DefaultFalse, + PosFlag<SetTrue, [CC1Option], "Enable">, NegFlag<SetFalse, [], "Disable">, + BothFlags<[], " detection of uninitialized parameters and return values">>; +//// Note: This flag was introduced when it was necessary to distinguish between // ABI for correct codegen. This is no longer needed, but the flag is // not removed since targeting either ABI will behave the same. // This way we cause no disturbance to existing scripts & code, and if we @@ -5399,7 +5398,8 @@ BothFlags<[], " the Clang AST before running backend code generation">>; def enable_noundef_analysis : Flag<["-"], "enable-noundef-analysis">, Group<f_Group>, HelpText<"Enable analyzing function argument and return types for mandatory definedness">, - MarshallingInfoFlag<CodeGenOpts<"EnableNoundefAttrs">>; + MarshallingInfoFlag<CodeGenOpts<"EnableNoundefAttrs">>, + ImpliedByAnyOf<[fsanitize_memory_param_retval.KeyPath]>; def discard_value_names : Flag<["-"], "discard-value-names">, HelpText<"Discard value names in LLVM IR">, MarshallingInfoFlag<CodeGenOpts<"DiscardValueNames">>;
Index: compiler-rt/test/msan/noundef_analysis.cpp =================================================================== --- compiler-rt/test/msan/noundef_analysis.cpp +++ compiler-rt/test/msan/noundef_analysis.cpp @@ -2,6 +2,8 @@ // RUN: FileCheck %s --check-prefix=MISSED --allow-empty < %t.out // RUN: %clangxx_msan %s -Xclang -enable-noundef-analysis -mllvm -msan-eager-checks=1 -o %t && not %run %t >%t.out 2>&1 // RUN: FileCheck %s < %t.out +// RUN: %clangxx_msan %s -fsanitize-memory-param-retval -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out struct SimpleStruct { int md1; Index: clang/test/CodeGen/msan-param-retval.c =================================================================== --- clang/test/CodeGen/msan-param-retval.c +++ clang/test/CodeGen/msan-param-retval.c @@ -5,7 +5,7 @@ // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -fsanitize=memory -Xclang -enable-noundef-analysis -mllvm -msan-eager-checks -o - %s | \ // RUN: FileCheck %s --check-prefixes=NOUNDEF,EAGER // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -fsanitize=memory -fsanitize-memory-param-retval -o - %s | \ -// RUN: FileCheck %s --check-prefixes=CLEAN +// RUN: FileCheck %s --check-prefixes=NOUNDEF,EAGER // RUN: %clang -target x86_64-linux-gnu -S -emit-llvm -fsanitize=memory -Xclang -enable-noundef-analysis -fsanitize-memory-param-retval -o - %s | \ // RUN: FileCheck %s --check-prefixes=NOUNDEF,EAGER Index: clang/test/CodeGen/indirect-noundef.cpp =================================================================== --- clang/test/CodeGen/indirect-noundef.cpp +++ clang/test/CodeGen/indirect-noundef.cpp @@ -1,4 +1,9 @@ // RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -enable-noundef-analysis -o - %s | FileCheck %s +// RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -fsanitize-memory-param-retval -o - %s | FileCheck %s + +// no-sanitize-memory-param-retval does NOT conflict with enable-noundef-analysis +// RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -fno-sanitize-memory-param-retval -enable-noundef-analysis -o - %s | FileCheck %s +// RUN: %clang -cc1 -x c++ -triple x86_64-unknown-unknown -O0 -emit-llvm -enable-noundef-analysis -fno-sanitize-memory-param-retval -o - %s | FileCheck %s union u1 { int val; Index: clang/test/CodeGen/attr-noundef.cpp =================================================================== --- clang/test/CodeGen/attr-noundef.cpp +++ clang/test/CodeGen/attr-noundef.cpp @@ -1,5 +1,11 @@ // RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -enable-noundef-analysis %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL // RUN: %clang -cc1 -triple aarch64-gnu-linux -x c++ -S -emit-llvm -enable-noundef-analysis %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-AARCH +// RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -fsanitize-memory-param-retval %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL +// RUN: %clang -cc1 -triple aarch64-gnu-linux -x c++ -S -emit-llvm -fsanitize-memory-param-retval %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-AARCH + +// no-sanitize-memory-param-retval does NOT conflict with enable-noundef-analysis +// RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -enable-noundef-analysis -fno-sanitize-memory-param-retval %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL +// RUN: %clang -cc1 -triple x86_64-gnu-linux -x c++ -S -emit-llvm -fno-sanitize-memory-param-retval -enable-noundef-analysis %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-INTEL //************ Passing structs by value // TODO: No structs may currently be marked noundef Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1670,13 +1670,12 @@ NormalizedValues<["None", "Global"]>, MarshallingInfoEnum<CodeGenOpts<"SanitizeAddressDtor">, "Global">; defm sanitize_memory_param_retval - : BoolOption<"f", "sanitize-memory-param-retval", - CodeGenOpts<"SanitizeMemoryParamRetval">, - DefaultFalse, - PosFlag<SetTrue, [CC1Option], "Enable">, NegFlag<SetFalse, [], "Disable">, - BothFlags<[], " detection of uninitialized parameters and return values">>, - Group<f_clang_Group>; -// Note: This flag was introduced when it was necessary to distinguish between + : BoolFOption<"sanitize-memory-param-retval", + CodeGenOpts<"SanitizeMemoryParamRetval">, + DefaultFalse, + PosFlag<SetTrue, [CC1Option], "Enable">, NegFlag<SetFalse, [], "Disable">, + BothFlags<[], " detection of uninitialized parameters and return values">>; +//// Note: This flag was introduced when it was necessary to distinguish between // ABI for correct codegen. This is no longer needed, but the flag is // not removed since targeting either ABI will behave the same. // This way we cause no disturbance to existing scripts & code, and if we @@ -5399,7 +5398,8 @@ BothFlags<[], " the Clang AST before running backend code generation">>; def enable_noundef_analysis : Flag<["-"], "enable-noundef-analysis">, Group<f_Group>, HelpText<"Enable analyzing function argument and return types for mandatory definedness">, - MarshallingInfoFlag<CodeGenOpts<"EnableNoundefAttrs">>; + MarshallingInfoFlag<CodeGenOpts<"EnableNoundefAttrs">>, + ImpliedByAnyOf<[fsanitize_memory_param_retval.KeyPath]>; def discard_value_names : Flag<["-"], "discard-value-names">, HelpText<"Discard value names in LLVM IR">, MarshallingInfoFlag<CodeGenOpts<"DiscardValueNames">>;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits