diff --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst index 25bbd72c81f7a..edc2bce6a964d 100644 --- a/clang/docs/UsersManual.rst +++ b/clang/docs/UsersManual.rst @@ -4383,6 +4383,7 @@ Execute ``clang-cl /?`` to see a list of supported options: -fno-sanitize-trap= Disable trapping for specified sanitizers -fno-standalone-debug Limit debug information produced to reduce size of debug binary + -fno-strict-aliasing Disable optimizations based on strict aliasing rules (default) -fobjc-runtime= Specify the target Objective-C runtime kind and version -fprofile-exclude-files= Instrument only functions from files where names don't match all the regexes separated by a semi-colon @@ -4444,6 +4445,7 @@ Execute ``clang-cl /?`` to see a list of supported options: behavior. See user manual for available checks -fsplit-lto-unit Enables splitting of the LTO unit. -fstandalone-debug Emit full debug info for all types used by the program + -fstrict-aliasing Enable optimizations based on strict aliasing rules -fsyntax-only Run the preprocessor, parser and semantic analysis stages -fwhole-program-vtables Enables whole-program vtable optimization. Requires -flto -gcodeview-ghash Emit type record hashes in a .debug$H section @@ -4722,3 +4724,16 @@ The Visual C++ Toolset has a slightly more elaborate mechanism for detection. The registry information is used to help locate the installation as a final fallback. This is only possible for pre-VS2017 installations and is considered deprecated. + +Restrictions and Limitations compared to Clang +---------------------------------------------- + +Strict Aliasing +^^^^^^^^^^^^^^^ + +Strict aliasing (TBAA) is always off by default in clang-cl. Whereas in clang, +strict aliasing is turned on by default for all optimization levels. + +To enable LLVM optimizations based on strict aliasing rules (e.g., optimizations +based on type of expressions in C/C++), user will need to explicitly pass +`-fstrict-aliasing` to clang-cl. diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 5415b18d3f406..c272a7f1c398a 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3152,7 +3152,8 @@ defm diagnostics_show_line_numbers : BoolFOption<"diagnostics-show-line-numbers" def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group, HelpText<"Disable the use of stack protectors">; def fno_strict_aliasing : Flag<["-"], "fno-strict-aliasing">, Group, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>; + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, + HelpText<"Disable optimizations based on strict aliasing rules">; def fstruct_path_tbaa : Flag<["-"], "fstruct-path-tbaa">, Group; def fno_struct_path_tbaa : Flag<["-"], "fno-struct-path-tbaa">, Group; def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group; @@ -3595,7 +3596,8 @@ def fno_debug_macro : Flag<["-"], "fno-debug-macro">, Group, Visibility<[ClangOption, CLOption, DXCOption]>, HelpText<"Do not emit macro debug information">; def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>; + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>, + HelpText<"Enable optimizations based on strict aliasing rules">; def fstrict_enums : Flag<["-"], "fstrict-enums">, Group, Visibility<[ClangOption, CC1Option]>, HelpText<"Enable optimizations based on the strict definition of an enum's "