[all-commits] [llvm/llvm-project] 84a3aa: Diagnose use of VLAs in C++ by default
Aaron Ballman via All-commits
all-commits at lists.llvm.org
Fri Oct 20 10:10:36 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 84a3aadf0f2483dde0acfc4e79f2a075a5f35bd1
https://github.com/llvm/llvm-project/commit/84a3aadf0f2483dde0acfc4e79f2a075a5f35bd1
Author: Aaron Ballman <aaron at aaronballman.com>
Date: 2023-10-20 (Fri, 20 Oct 2023)
Changed paths:
M clang/docs/ReleaseNotes.rst
M clang/include/clang/Basic/DiagnosticGroups.td
M clang/include/clang/Basic/DiagnosticSemaKinds.td
M clang/lib/Sema/SemaType.cpp
M clang/test/AST/Interp/literals.cpp
M clang/test/Analysis/lambdas.cpp
M clang/test/CXX/basic/basic.types/p10.cpp
M clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp
M clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp
M clang/test/CXX/temp/temp.arg/temp.arg.type/p2.cpp
M clang/test/CXX/temp/temp.decls/temp.variadic/p5.cpp
M clang/test/Misc/warning-wall.c
M clang/test/OpenMP/debug-info-openmp-array.cpp
M clang/test/OpenMP/for_reduction_codegen.cpp
M clang/test/OpenMP/for_reduction_codegen_UDR.cpp
M clang/test/OpenMP/master_taskloop_firstprivate_codegen.cpp
M clang/test/OpenMP/master_taskloop_in_reduction_codegen.cpp
M clang/test/OpenMP/master_taskloop_lastprivate_codegen.cpp
M clang/test/OpenMP/master_taskloop_private_codegen.cpp
M clang/test/OpenMP/master_taskloop_reduction_codegen.cpp
M clang/test/OpenMP/master_taskloop_simd_firstprivate_codegen.cpp
M clang/test/OpenMP/master_taskloop_simd_in_reduction_codegen.cpp
M clang/test/OpenMP/master_taskloop_simd_lastprivate_codegen.cpp
M clang/test/OpenMP/master_taskloop_simd_private_codegen.cpp
M clang/test/OpenMP/master_taskloop_simd_reduction_codegen.cpp
M clang/test/OpenMP/nvptx_target_codegen.cpp
M clang/test/OpenMP/parallel_ast_print.cpp
M clang/test/OpenMP/parallel_codegen.cpp
M clang/test/OpenMP/parallel_firstprivate_codegen.cpp
M clang/test/OpenMP/parallel_for_codegen.cpp
M clang/test/OpenMP/parallel_masked_ast_print.cpp
M clang/test/OpenMP/parallel_master_ast_print.cpp
M clang/test/OpenMP/parallel_master_taskloop_firstprivate_codegen.cpp
M clang/test/OpenMP/parallel_master_taskloop_lastprivate_codegen.cpp
M clang/test/OpenMP/parallel_master_taskloop_private_codegen.cpp
M clang/test/OpenMP/parallel_master_taskloop_reduction_codegen.cpp
M clang/test/OpenMP/parallel_master_taskloop_simd_firstprivate_codegen.cpp
M clang/test/OpenMP/parallel_master_taskloop_simd_lastprivate_codegen.cpp
M clang/test/OpenMP/parallel_master_taskloop_simd_private_codegen.cpp
M clang/test/OpenMP/parallel_master_taskloop_simd_reduction_codegen.cpp
M clang/test/OpenMP/single_codegen.cpp
M clang/test/OpenMP/target_ast_print.cpp
M clang/test/OpenMP/target_codegen.cpp
M clang/test/OpenMP/target_constant_device_codegen.cpp
M clang/test/OpenMP/target_data_codegen.cpp
M clang/test/OpenMP/target_data_use_device_addr_codegen.cpp
M clang/test/OpenMP/target_defaultmap_codegen_01.cpp
M clang/test/OpenMP/target_defaultmap_messages.cpp
M clang/test/OpenMP/target_depend_codegen.cpp
M clang/test/OpenMP/target_enter_data_codegen.cpp
M clang/test/OpenMP/target_enter_data_depend_codegen.cpp
M clang/test/OpenMP/target_exit_data_codegen.cpp
M clang/test/OpenMP/target_exit_data_depend_codegen.cpp
M clang/test/OpenMP/target_firstprivate_codegen.cpp
M clang/test/OpenMP/target_has_device_addr_codegen_01.cpp
M clang/test/OpenMP/target_in_reduction_codegen.cpp
M clang/test/OpenMP/target_map_codegen_12.cpp
M clang/test/OpenMP/target_map_codegen_18a.cpp
M clang/test/OpenMP/target_map_codegen_18b.cpp
M clang/test/OpenMP/target_map_codegen_18c.cpp
M clang/test/OpenMP/target_map_codegen_18d.cpp
M clang/test/OpenMP/target_map_messages.cpp
M clang/test/OpenMP/target_parallel_codegen.cpp
M clang/test/OpenMP/target_parallel_defaultmap_messages.cpp
M clang/test/OpenMP/target_parallel_depend_codegen.cpp
M clang/test/OpenMP/target_parallel_for_codegen.cpp
M clang/test/OpenMP/target_parallel_for_depend_codegen.cpp
M clang/test/OpenMP/target_parallel_for_simd_codegen.cpp
M clang/test/OpenMP/target_parallel_for_simd_depend_codegen.cpp
M clang/test/OpenMP/target_parallel_generic_loop_depend_codegen.cpp
M clang/test/OpenMP/target_private_codegen.cpp
M clang/test/OpenMP/target_reduction_codegen.cpp
M clang/test/OpenMP/target_simd_codegen.cpp
M clang/test/OpenMP/target_simd_depend_codegen.cpp
M clang/test/OpenMP/target_teams_codegen.cpp
M clang/test/OpenMP/target_teams_depend_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_collapse_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_depend_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_dist_schedule_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_collapse_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_depend_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_dist_schedule_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_schedule_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_simd_collapse_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_simd_depend_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_parallel_for_simd_schedule_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_simd_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_simd_collapse_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_simd_depend_codegen.cpp
M clang/test/OpenMP/target_teams_distribute_simd_dist_schedule_codegen.cpp
M clang/test/OpenMP/target_teams_generic_loop_collapse_codegen.cpp
M clang/test/OpenMP/target_teams_generic_loop_depend_codegen.cpp
M clang/test/OpenMP/target_teams_map_messages.cpp
M clang/test/OpenMP/target_update_codegen.cpp
M clang/test/OpenMP/target_update_depend_codegen.cpp
M clang/test/OpenMP/task_ast_print.cpp
M clang/test/OpenMP/task_codegen.cpp
M clang/test/OpenMP/task_firstprivate_codegen.cpp
M clang/test/OpenMP/task_in_reduction_codegen.cpp
M clang/test/OpenMP/task_private_codegen.cpp
M clang/test/OpenMP/taskgroup_task_reduction_codegen.cpp
M clang/test/OpenMP/taskloop_firstprivate_codegen.cpp
M clang/test/OpenMP/taskloop_in_reduction_codegen.cpp
M clang/test/OpenMP/taskloop_lastprivate_codegen.cpp
M clang/test/OpenMP/taskloop_private_codegen.cpp
M clang/test/OpenMP/taskloop_reduction_codegen.cpp
M clang/test/OpenMP/taskloop_simd_firstprivate_codegen.cpp
M clang/test/OpenMP/taskloop_simd_in_reduction_codegen.cpp
M clang/test/OpenMP/taskloop_simd_lastprivate_codegen.cpp
M clang/test/OpenMP/taskloop_simd_private_codegen.cpp
M clang/test/OpenMP/taskloop_simd_reduction_codegen.cpp
M clang/test/OpenMP/teams_distribute_codegen.cpp
M clang/test/OpenMP/teams_distribute_collapse_codegen.cpp
M clang/test/OpenMP/teams_distribute_dist_schedule_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_collapse_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_dist_schedule_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_schedule_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_simd_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_simd_collapse_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp
M clang/test/OpenMP/teams_distribute_parallel_for_simd_schedule_codegen.cpp
M clang/test/OpenMP/teams_distribute_simd_codegen.cpp
M clang/test/OpenMP/teams_distribute_simd_collapse_codegen.cpp
M clang/test/OpenMP/teams_distribute_simd_dist_schedule_codegen.cpp
M clang/test/OpenMP/teams_firstprivate_codegen.cpp
M clang/test/OpenMP/teams_generic_loop_codegen-1.cpp
M clang/test/Parser/objcxx11-attributes.mm
M clang/test/Parser/pragma-loop.cpp
M clang/test/Sema/vla.cpp
M clang/test/Sema/wasm-refs-and-tables.c
M clang/test/SemaCUDA/call-stack-for-deferred-err.cu
M clang/test/SemaCUDA/no-call-stack-for-immediate-errs.cu
M clang/test/SemaCUDA/vla.cu
M clang/test/SemaCXX/PR10177.cpp
M clang/test/SemaCXX/alias-template.cpp
M clang/test/SemaCXX/anonymous-struct.cpp
M clang/test/SemaCXX/c99-variable-length-array-cxx11.cpp
M clang/test/SemaCXX/c99-variable-length-array.cpp
M clang/test/SemaCXX/constant-expression-cxx11.cpp
M clang/test/SemaCXX/constexpr-array-unknown-bound.cpp
M clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp
M clang/test/SemaCXX/cxx0x-noexcept-expression.cpp
M clang/test/SemaCXX/cxx1y-generic-lambdas.cpp
M clang/test/SemaCXX/cxx1z-noexcept-function-type.cpp
M clang/test/SemaCXX/cxx2a-consteval.cpp
M clang/test/SemaCXX/cxx2a-constexpr-dynalloc-limits.cpp
M clang/test/SemaCXX/exceptions.cpp
M clang/test/SemaCXX/for-range-examples.cpp
M clang/test/SemaCXX/i-c-e-cxx.cpp
M clang/test/SemaCXX/lambda-expressions.cpp
M clang/test/SemaCXX/new-delete-0x.cpp
M clang/test/SemaCXX/new-delete.cpp
M clang/test/SemaCXX/offsetof.cpp
M clang/test/SemaCXX/paren-list-agg-init.cpp
M clang/test/SemaCXX/vararg-non-pod.cpp
M clang/test/SemaCXX/vla-construct.cpp
A clang/test/SemaCXX/vla-ext-diag.cpp
M clang/test/SemaCXX/vla.cpp
M clang/test/SemaCXX/warn-unused-lambda-capture.cpp
M clang/test/SemaCXX/warn-unused-variables.cpp
M clang/test/SemaObjCXX/properties.mm
M clang/test/SemaObjCXX/vla.mm
M clang/test/SemaSYCL/unique_stable_name.cpp
M clang/test/SemaTemplate/concepts-out-of-line-def.cpp
M clang/test/SemaTemplate/deduction.cpp
M clang/test/SemaTemplate/instantiate-sizeof.cpp
M clang/test/SemaTemplate/instantiate-typeof.cpp
Log Message:
-----------
Diagnose use of VLAs in C++ by default
Reapplication of 7339c0f782d5c70e0928f8991b0c05338a90c84c with a fix
for a crash involving arrays without a size expression.
Clang supports VLAs in C++ as an extension, but we currently only warn
on their use when you pass -Wvla, -Wvla-extension, or -pedantic.
However, VLAs as they're expressed in C have been considered by WG21
and rejected, are easy to use accidentally to the surprise of users
(e.g., https://ddanilov.me/default-non-standard-features/), and they
have potential security implications beyond constant-size arrays
(https://wiki.sei.cmu.edu/confluence/display/c/ARR32-C.+Ensure+size+arguments+for+variable+length+arrays+are+in+a+valid+range).
C++ users should strongly consider using other functionality such as
std::vector instead.
This seems like sufficiently compelling evidence to warn users about
VLA use by default in C++ modes. This patch enables the -Wvla-extension
diagnostic group in C++ language modes by default, and adds the warning
group to -Wall in GNU++ language modes. The warning is still opt-in in
C language modes, where support for VLAs is somewhat less surprising to
users.
RFC: https://discourse.llvm.org/t/rfc-diagnosing-use-of-vlas-in-c/73109
Fixes https://github.com/llvm/llvm-project/issues/62836
Differential Revision: https://reviews.llvm.org/D156565
More information about the All-commits
mailing list