diff --git a/infer/src/concurrency/RacerD.ml b/infer/src/concurrency/RacerD.ml index b815aef21..95191ca42 100644 --- a/infer/src/concurrency/RacerD.ml +++ b/infer/src/concurrency/RacerD.ml @@ -1123,7 +1123,7 @@ let analyze_procedure {Callbacks.proc_desc; get_proc_desc; tenv; summary} = variables cannot be raced on as every thread has its own stack. *) let own_locals_in_cpp = match Procdesc.get_proc_name proc_desc with - | ObjC_Cpp _ -> + | ObjC_Cpp _ | C _ -> List.fold ~f:add_owned_local (Procdesc.get_locals proc_desc) ~init:OwnershipDomain.empty | _ -> @@ -1917,4 +1917,3 @@ let file_analysis {Callbacks.procedures} = else (module MayAliasQuotientedAccessListMap) ) class_env)) (aggregate_by_class procedures) - diff --git a/infer/tests/codetoanalyze/cpp/racerd/locals_char_array.cpp b/infer/tests/codetoanalyze/cpp/racerd/locals_char_array.cpp new file mode 100644 index 000000000..1e67a4078 --- /dev/null +++ b/infer/tests/codetoanalyze/cpp/racerd/locals_char_array.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2017 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#include + +namespace locals_char_array { + +void f() { + char line[1024]; + line[0] = line[1]; +} + +struct A { + void not_locked() { f(); } + + bool locked() { + mutex_.lock(); + f(); + } + std::mutex mutex_; +}; + +} // namespace locals_char_array