String Concatenation/Interpolationnightly-2021.02.17
commitccff0be23e8d2c6d3ae7304f5c8dd57905485dd3
authorDavid Snider <dizzy@fb.com>
Wed, 17 Feb 2021 00:40:14 +0000 (16 16:40 -0800)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Wed, 17 Feb 2021 00:44:00 +0000 (16 16:44 -0800)
treed8cefa8dc544a93f476c4441b92fbdea5fa22423
parentde0d2bb1546ba72fc77f09f2b3c4a87e3ab8a943
String Concatenation/Interpolation

Summary:
Emit notices for usage of double, resource, bool, and null in string concatenation and interpolation.

I had to move convtvtostr and convrestostr into manual lowering due to an issue with threading a nullptr in extra data through the native-calls simplified version.

Of all the changed pieces, only tvConcatEq was remotely hot with .14% GCPU. To avoid potentially unnecessary complexity, I read the flag within that function rather tham doing it within the jit. Since the flag is only actually processed in the colder situations, I am hopeful there won't be anything resembling a regression.

Differential Revision: D26444161

fbshipit-source-id: df5e85638dd7018db0e7dbaa0b16aebca47bf1f4
38 files changed:
hphp/compiler/analysis/emitter.cpp
hphp/compiler/option.cpp
hphp/hhbbc/dce.cpp
hphp/hhbbc/interp.cpp
hphp/hhbbc/main.cpp
hphp/runtime/base/runtime-option.h
hphp/runtime/base/tv-arith.h
hphp/runtime/base/tv-conversions.cpp
hphp/runtime/base/tv-conversions.h
hphp/runtime/base/type-variant.h
hphp/runtime/vm/bytecode.cpp
hphp/runtime/vm/jit/extra-data.h
hphp/runtime/vm/jit/irgen-arith.cpp
hphp/runtime/vm/jit/irgen-basic.cpp
hphp/runtime/vm/jit/irlower-conv.cpp
hphp/runtime/vm/jit/native-calls.cpp
hphp/runtime/vm/jit/simplify.cpp
hphp/runtime/vm/jit/translator-runtime.cpp
hphp/runtime/vm/jit/translator-runtime.h
hphp/runtime/vm/repo-global-data.cpp
hphp/runtime/vm/repo-global-data.h
hphp/runtime/vm/repo.cpp
hphp/test/slow/implicit_conversions/string-concat-interp/from_func_args.php [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/from_func_args.php.expectf [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/from_func_args.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/from_func_args.php.opts [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/known.php [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/known.php.expectf [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/known.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/known.php.opts [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/laundered_values.php [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/laundered_values.php.expectf [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/laundered_values.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/laundered_values.php.opts [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/literals.php [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/literals.php.expectf [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/literals.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/implicit_conversions/string-concat-interp/literals.php.opts [new file with mode: 0644]