[BinAST] Make Huffman lookup faster for large tables
Categories
(Core :: JavaScript Engine, task, P1)
Tracking
()
Tracking | Status | |
---|---|---|
firefox71 | --- | fixed |
People
(Reporter: Yoric, Assigned: Yoric)
References
Details
Attachments
(6 files, 1 obsolete file)
47 bytes,
text/x-phabricator-request
|
Details | Review | |
47 bytes,
text/x-phabricator-request
|
Details | Review | |
47 bytes,
text/x-phabricator-request
|
Details | Review | |
47 bytes,
text/x-phabricator-request
|
Details | Review | |
47 bytes,
text/x-phabricator-request
|
Details | Review | |
47 bytes,
text/x-phabricator-request
|
Details | Review |
Right now, lookup in large Huffman tables is the #1 offender (see https://bugzilla.mozilla.org/show_bug.cgi?id=1577764#c5). We need a faster lookup mechanism for large tables.
Assignee | ||
Comment 1•6 years ago
|
||
This will simplify our life once we start working on multi-lookup tables.
Assignee | ||
Comment 2•6 years ago
|
||
Depends on D46454
Assignee | ||
Comment 3•6 years ago
|
||
Depends on D46455
Updated•6 years ago
|
Assignee | ||
Comment 4•6 years ago
|
||
The MultiLookupHuffmanTable is designed to allow fast lookup in tables that
have a max bit length too large for the SingleLookupHuffmanTable.
We will probably need to tune the bit lengths at which we switch from SingleLookup to TwoLookups or ThreeLookups in followup patches.
Assignee | ||
Comment 5•6 years ago
|
||
Depends on D46806
Assignee | ||
Comment 6•6 years ago
|
||
Assignee | ||
Comment 7•6 years ago
|
||
Assignee | ||
Comment 8•6 years ago
•
|
||
In the current state, I get the following profile:
Weight | Weight% | Self Weight | Symbol
------ | ------- | ----------- | ---------
11.68 s | 6.3% | 11.68 s | mozilla::Result<js::frontend::HuffmanLookup, JS::Error&> js::frontend::BinASTTokenReaderContext::BitBuffer::getHuffmanLookup<(js::frontend::BinASTTokenReaderContext::Compression)0>(js::frontend::BinASTTokenReaderContext&)
10.28 s | 5.6% | 10.28 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<JSAtom*, unsigned char>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<JSAtom*, unsigned char>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<JSAtom*>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
8.24 s | 4.5% | 8.24 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<js::frontend::BinASTKind, unsigned char>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<js::frontend::BinASTKind, unsigned char>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<js::frontend::BinASTKind, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<js::frontend::BinASTKind>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
7.94 s | 4.3% | 7.94 s | js::frontend::TagReader::operator()(js::frontend::HuffmanTableIndexedSymbolsSum const&)
6.96 s | 3.8% | 6.96 s | js::frontend::MultiLookupHuffmanTable<JSAtom*, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>::lookup(js::frontend::HuffmanLookup) const
6.41 s | 3.5% | 6.41 s | js::frontend::BinASTTokenReaderContext::enterTaggedTuple(js::frontend::BinASTKind&, js::frontend::BinASTTokenReaderContext::BinASTFields&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&, js::frontend::BinASTTokenReaderContext::AutoTaggedTuple&)
4.29 s | 2.3% | 4.29 s | js::frontend::FunctionBox::FunctionBox(JSContext*, js::frontend::TraceListNode*, JSFunction*, unsigned int, js::frontend::Directives, bool, js::GeneratorKind, js::FunctionAsyncKind)
3.98 s | 2.1% | 3.98 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 0ul, js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString>::match<js::frontend::TagReader, mozilla::Variant<js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString> const>(js::frontend::TagReader&&, mozilla::Variant<js::frontend::HuffmanTableUnreachable, js::frontend::HuffmanTableInitializing, js::frontend::HuffmanTableExplicitSymbolsF64, js::frontend::HuffmanTableExplicitSymbolsU32, js::frontend::HuffmanTableIndexedSymbolsSum, js::frontend::HuffmanTableIndexedSymbolsMaybeInterface, js::frontend::HuffmanTableIndexedSymbolsBool, js::frontend::HuffmanTableIndexedSymbolsStringEnum, js::frontend::HuffmanTableIndexedSymbolsLiteralString, js::frontend::HuffmanTableIndexedSymbolsOptionalLiteralString> const&)
3.91 s | 2.1% | 3.91 s | js::frontend::UsedNameTracker::noteUse(JSContext*, JSAtom*, unsigned int, unsigned int)
3.84 s | 2.1% | 3.84 s | mozilla::Result<js::frontend::HuffmanTableIndexedSymbolsLiteralString::Contents, JS::Error&> js::frontend::BinASTTokenReaderContext::readFieldFromTable<js::frontend::HuffmanTableIndexedSymbolsLiteralString>(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.67 s | 2.0% | 3.67 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceIdentifierExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.62 s | 1.9% | 3.62 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceStaticMemberExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
3.54 s | 1.9% | 3.54 s | bool GetUTF8AtomizationData<JS::WTF8Chars>(JSContext*, JS::WTF8Chars, unsigned long*, JS::SmallestEncoding*, unsigned int*)
3.48 s | 1.9% | 3.48 s | decltype(auto) mozilla::detail::VariantImplementation<unsigned char, 1ul, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable>::matchN<mozilla::Variant<js::frontend::SingleLookupHuffmanTable<unsigned int, unsigned char>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&), js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)>(mozilla::Variant<js::frontend::SingleLookupHuffmanTable<unsigned int, unsigned char>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6>, js::frontend::HuffmanTableUnreachable> const&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::MultiLookupHuffmanTable<unsigned int, js::frontend::MultiLookupHuffmanTable<unsigned long, js::frontend::SingleLookupHuffmanTable<unsigned long, unsigned char>, (unsigned char)6>, (unsigned char)6> const&)&&, js::frontend::GenericHuffmanTable<unsigned int>::lookup(js::frontend::HuffmanLookup) const::'lambda'(js::frontend::HuffmanTableUnreachable const&)&&)
3.39 s | 1.8% | 3.39 s | js::frontend::ParseNodeAllocator::allocNode(unsigned long)
2.54 s | 1.3% | 2.54 s | JSAtom* AtomizeUTF8OrWTF8Chars<JS::WTF8Chars>(JSContext*, char const*, unsigned long)
2.41 s | 1.3% | 2.41 s | js::frontend::BinASTTokenReaderContext::enterList(unsigned int&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&, js::frontend::BinASTTokenReaderContext::AutoList&)
2.23 s | 1.2% | 2.23 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceCallExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
2.10 s | 1.1% | 2.10 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseArguments(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
2.02 s | 1.1% | 2.02 s | js::frontend::BinASTParser<js::frontend::BinASTTokenReaderContext>::parseInterfaceBinaryExpression(unsigned long, js::frontend::BinASTKind, js::frontend::BinASTTokenReaderContext::BinASTFields const&, mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
1.96 s | 1.0% | 1.96 s | mozilla::Result<js::frontend::HuffmanTableIndexedSymbolsBool::Contents, JS::Error&> js::frontend::BinASTTokenReaderContext::readFieldFromTable<js::frontend::HuffmanTableIndexedSymbolsBool>(mozilla::Variant<js::frontend::BinASTTokenReaderBase::RootContext, js::frontend::BinASTTokenReaderBase::ListContext, js::frontend::BinASTTokenReaderBase::FieldContext> const&)
Decoding a bit, the worst offenders are:
- 6.3% fetching bits from the bit stream (should be faster once we merge with bug 1581052);
- 5.6% Huffman lookup for strings (all);
- 4.5% Huffman lookup for tagged tuples;
- 4.3% treating tagged tuples(?);
- 3.8% Huffman lookup for strings (very large tables);
- 3.5% entering tagged tuples.
So, next steps should probably be to work on:
- improving bit stream (bug 1581052);
- making lookup faster for small tables (tagged tuples);
- making lookup faster for large tables (strings).
Assignee | ||
Updated•6 years ago
|
Comment 10•6 years ago
|
||
Backed out 6 changesets (Bug 1581875) for BinASTTokenReaderContext related bustages
Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&fromchange=bd60492f2fda2d10a09770e3bbc2f7f839cf38b2&tochange=62fa0e6c45bc5bb032d18ceb70b4629a89f79c5c&selectedJob=268753597
Backout link: https://hg.mozilla.org/integration/autoland/rev/62fa0e6c45bc5bb032d18ceb70b4629a89f79c5c
Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=268753597&repo=autoland&lineNumber=7647
[task 2019-09-27T10:57:22.363Z] 10:57:22 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/js/src/frontend'
[task 2019-09-27T10:57:22.364Z] 10:57:22 INFO - /builds/worker/fetches/sccache/sccache /builds/worker/fetches/clang/bin/clang++ -o BinASTTokenReaderContext.o -c -I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers -include /builds/worker/workspace/build/src/config/gcc_hidden.h -DNDEBUG=1 -DTRIMMED=1 -DWASM_SUPPORTS_HUGE_MEMORY -DJS_CACHEIR_SPEW -DJS_STRUCTURED_SPEW -DJS_HAS_CTYPES -DFFI_BUILDING -DEXPORT_JS_API -DMOZ_HAS_MOZGLUE -I/builds/worker/workspace/build/src/js/src/frontend -I/builds/worker/workspace/build/src/obj-firefox/js/src/frontend -I/builds/worker/workspace/build/src/obj-firefox/js/src -I/builds/worker/workspace/build/src/js/src -I/builds/worker/workspace/build/src/obj-firefox/dist/include -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr -fPIC -DMOZILLA_CLIENT -include /builds/worker/workspace/build/src/obj-firefox/js/src/js-confdefs.h -Qunused-arguments -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Qunused-arguments -Wall -Wbitfield-enum-conversion -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtype-limits -Wunreachable-code -Wunreachable-code-return -Wwrite-strings -Wno-invalid-offsetof -Wclass-varargs -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wc++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wno-error=tautological-type-limit-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=backend-plugin -Wno-error=return-std-move -Wno-error=atomic-alignment -Wformat -Wformat-security -Wno-gnu-zero-variadic-macro-arguments -Wno-noexcept-type -Wno-unknown-warning-option -Wno-return-type-c-linkage -D_GLIBCXX_USE_CXX11_ABI=0 -fno-sized-deallocation -fno-aligned-new -fcrash-diagnostics-dir=/builds/worker/artifacts -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -Xclang -load -Xclang /builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -O3 -fno-omit-frame-pointer -funwind-tables -Werror -fno-strict-aliasing -Werror=format -Wno-shadow -MD -MP -MF .deps/BinASTTokenReaderContext.o.pp /builds/worker/workspace/build/src/js/src/frontend/BinASTTokenReaderContext.cpp
[task 2019-09-27T10:57:22.364Z] 10:57:22 ERROR - /builds/worker/workspace/build/src/js/src/frontend/BinASTTokenReaderContext.cpp:69:15: error: unused variable 'MAX_BIT_LENGTH_IN_SATURATED_TABLE' [-Werror,-Wunused-const-variable]
[task 2019-09-27T10:57:22.364Z] 10:57:22 INFO - const uint8_t MAX_BIT_LENGTH_IN_SATURATED_TABLE = 10;
[task 2019-09-27T10:57:22.364Z] 10:57:22 INFO - ^
[task 2019-09-27T10:57:22.364Z] 10:57:22 INFO - 1 error generated.
[task 2019-09-27T10:57:22.364Z] 10:57:22 INFO - /builds/worker/workspace/build/src/config/rules.mk:785: recipe for target 'BinASTTokenReaderContext.o' failed
[task 2019-09-27T10:57:22.364Z] 10:57:22 ERROR - make[4]: *** [BinASTTokenReaderContext.o] Error 1
[task 2019-09-27T10:57:22.364Z] 10:57:22 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/js/src/frontend'
[task 2019-09-27T10:57:22.366Z] 10:57:22 INFO - make[4]: *** Waiting for unfinished jobs....
[task 2019-09-27T10:57:22.366Z] 10:57:22 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/config/external/icu/common'
[task 2019-09-27T10:57:22.366Z] 10:57:22 INFO - /builds/worker/fetches/sccache/sccache /builds/worker/fetches/clang/bin/clang++ -o ucnv.o -c -I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers -include /builds/worker/workspace/build/src/config/gcc_hidden.h -DNDEBUG=1 -DTRIMMED=1 -DU_COMMON_IMPLEMENTATION -DUCONFIG_NO_TRANSLITERATION -DUCONFIG_NO_REGULAR_EXPRESSIONS -DUCONFIG_NO_LEGACY_CONVERSION -DU_USING_ICU_NAMESPACE=0 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_CHARSET_IS_UTF8 -DU_HAVE_NL_LANGINFO_CODESET=0 -I/builds/worker/workspace/build/src/config/external/icu/common -I/builds/worker/workspace/build/src/obj-firefox/config/external/icu/common -I/builds/worker/workspace/build/src/intl/icu/source/i18n -I/builds/worker/workspace/build/src/obj-firefox/dist/include -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nss -fPIC -DMOZILLA_CLIENT -include /builds/worker/workspace/build/src/obj-firefox/mozilla-config.h -Qunused-arguments -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Qunused-arguments -Wall -Wbitfield-enum-conversion -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtype-limits -Wunreachable-code -Wunreachable-code-return -Wwrite-strings -Wno-invalid-offsetof -Wclass-varargs -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wc++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wno-error=tautological-type-limit-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=backend-plugin -Wno-error=return-std-move -Wno-error=atomic-alignment -Wformat -Wformat-security -Wno-gnu-zero-variadic-macro-arguments -Wno-unknown-warning-option -Wno-return-type-c-linkage -D_GLIBCXX_USE_CXX11_ABI=0 -fno-sized-deallocation -fno-aligned-new -fcrash-diagnostics-dir=/builds/worker/artifacts -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -Xclang -load -Xclang /builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -O2 -fno-omit-frame-pointer -funwind-tables -Wno-deprecated-declarations -Wno-type-limits -Wno-unused-but-set-variable -Wno-unused-function -Wno-sign-compare -Wno-maybe-uninitialized -frtti -MD -MP -MF .deps/ucnv.o.pp /builds/worker/workspace/build/src/intl/icu/source/common/ucnv.cpp
[task 2019-09-27T10:57:22.366Z] 10:57:22 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/config/external/icu/common'
[task 2019-09-27T10:57:22.366Z] 10:57:22 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/config/external/icu/common'
[task 2019-09-27T10:57:22.366Z] 10:57:22 INFO - /builds/worker/fetches/sccache/sccache /builds/worker/fetches/clang/bin/clang++ -o ucnv_bld.o -c -I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers -include /builds/worker/workspace/build/src/config/gcc_hidden.h -DNDEBUG=1 -DTRIMMED=1 -DU_COMMON_IMPLEMENTATION -DUCONFIG_NO_TRANSLITERATION -DUCONFIG_NO_REGULAR_EXPRESSIONS -DUCONFIG_NO_LEGACY_CONVERSION -DU_USING_ICU_NAMESPACE=0 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_CHARSET_IS_UTF8 -DU_HAVE_NL_LANGINFO_CODESET=0 -I/builds/worker/workspace/build/src/config/external/icu/common -I/builds/worker/workspace/build/src/obj-firefox/config/external/icu/common -I/builds/worker/workspace/build/src/intl/icu/source/i18n -I/builds/worker/workspace/build/src/obj-firefox/dist/include -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nss -fPIC -DMOZILLA_CLIENT -include /builds/worker/workspace/build/src/obj-firefox/mozilla-config.h -Qunused-arguments -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Qunused-arguments -Wall -Wbitfield-enum-conversion -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtype-limits -Wunreachable-code -Wunreachable-code-return -Wwrite-strings -Wno-invalid-offsetof -Wclass-varargs -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wc++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wno-error=tautological-type-limit-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=backend-plugin -Wno-error=return-std-move -Wno-error=atomic-alignment -Wformat -Wformat-security -Wno-gnu-zero-variadic-macro-arguments -Wno-unknown-warning-option -Wno-return-type-c-linkage -D_GLIBCXX_USE_CXX11_ABI=0 -fno-sized-deallocation -fno-aligned-new -fcrash-diagnostics-dir=/builds/worker/artifacts -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -Xclang -load -Xclang /builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -O2 -fno-omit-frame-pointer -funwind-tables -Wno-deprecated-declarations -Wno-type-limits -Wno-unused-but-set-variable -Wno-unused-function -Wno-sign-compare -Wno-maybe-uninitialized -frtti -MD -MP -MF .deps/ucnv_bld.o.pp /builds/worker/workspace/build/src/intl/icu/source/common/ucnv_bld.cpp
[task 2019-09-27T10:57:22.366Z] 10:57:22 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/config/external/icu/common'
[task 2019-09-27T10:57:22.394Z] 10:57:22 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/libvpx'
[task 2019-09-27T10:57:22.394Z] 10:57:22 INFO - media/libvpx/findnearmv.o
...
Comment 11•6 years ago
|
||
Assignee | ||
Comment 12•6 years ago
|
||
(fixed the unused variable warning-as-error)
Comment 13•6 years ago
|
||
Backed out 6 changesets (Bug 1581875) for BinASTTokenReaderContext related bustages
Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&fromchange=4ac1966b6e0e5e27ede2a24cd9b0dae987b5c74c&tochange=d729cb741cb4502338d797606e8f4b3d41656b20&selectedJob=268780100
Backout link: https://hg.mozilla.org/integration/autoland/rev/d729cb741cb4502338d797606e8f4b3d41656b20
Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=268779719&repo=autoland&lineNumber=5319
[task 2019-09-27T13:09:30.178Z] 13:09:30 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/js/src/frontend'
[task 2019-09-27T13:09:30.182Z] 13:09:30 INFO - /builds/worker/fetches/sccache/sccache /builds/worker/fetches/clang/bin/clang++ -o BinASTTokenReaderContext.o -c -I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers -include /builds/worker/workspace/build/src/config/gcc_hidden.h -DDEBUG=1 -DWASM_SUPPORTS_HUGE_MEMORY -DJS_CACHEIR_SPEW -DJS_STRUCTURED_SPEW -DJS_HAS_CTYPES -DFFI_BUILDING -DEXPORT_JS_API -DMOZ_HAS_MOZGLUE -I/builds/worker/workspace/build/src/js/src/frontend -I/builds/worker/workspace/build/src/obj-firefox/js/src/frontend -I/builds/worker/workspace/build/src/obj-firefox/js/src -I/builds/worker/workspace/build/src/js/src -I/builds/worker/workspace/build/src/obj-firefox/dist/include -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr -fPIC -DMOZILLA_CLIENT -include /builds/worker/workspace/build/src/obj-firefox/js/src/js-confdefs.h -Qunused-arguments -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -ftrivial-auto-var-init=pattern -Qunused-arguments -Wall -Wbitfield-enum-conversion -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtype-limits -Wunreachable-code -Wunreachable-code-return -Wwrite-strings -Wno-invalid-offsetof -Wclass-varargs -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wc++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wno-error=tautological-type-limit-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=backend-plugin -Wno-error=return-std-move -Wno-error=atomic-alignment -Wformat -Wformat-security -Wno-gnu-zero-variadic-macro-arguments -Wno-noexcept-type -Wno-unknown-warning-option -Wno-return-type-c-linkage -D_GLIBCXX_USE_CXX11_ABI=0 -fno-sized-deallocation -fno-aligned-new -fcrash-diagnostics-dir=/builds/worker/artifacts -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -ftrivial-auto-var-init=pattern -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -Xclang -load -Xclang /builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -O3 -fno-omit-frame-pointer -funwind-tables -Werror -fno-strict-aliasing -Werror=format -Wno-shadow -MD -MP -MF .deps/BinASTTokenReaderContext.o.pp /builds/worker/workspace/build/src/js/src/frontend/BinASTTokenReaderContext.cpp
[task 2019-09-27T13:09:30.183Z] 13:09:30 ERROR - /builds/worker/workspace/build/src/js/src/frontend/BinASTTokenReaderContext.cpp:2047:34: error: use of undeclared identifier 'MAX_BIT_LENGTH_IN_SATURATED_TABLE'
[task 2019-09-27T13:09:30.183Z] 13:09:30 INFO - MOZ_ASSERT(largestBitLength <= MAX_BIT_LENGTH_IN_SATURATED_TABLE);
[task 2019-09-27T13:09:30.184Z] 13:09:30 INFO - ^
[task 2019-09-27T13:09:30.184Z] 13:09:30 ERROR - /builds/worker/workspace/build/src/js/src/frontend/BinASTTokenReaderContext.cpp:2047:34: error: use of undeclared identifier 'MAX_BIT_LENGTH_IN_SATURATED_TABLE'
[task 2019-09-27T13:09:30.184Z] 13:09:30 INFO - 2 errors generated.
[task 2019-09-27T13:09:30.184Z] 13:09:30 INFO - /builds/worker/workspace/build/src/config/rules.mk:785: recipe for target 'BinASTTokenReaderContext.o' failed
[task 2019-09-27T13:09:30.184Z] 13:09:30 ERROR - make[4]: *** [BinASTTokenReaderContext.o] Error 1
[task 2019-09-27T13:09:30.184Z] 13:09:30 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/js/src/frontend'
[task 2019-09-27T13:09:30.184Z] 13:09:30 INFO - make[4]: *** Waiting for unfinished jobs....
[task 2019-09-27T13:09:30.223Z] 13:09:30 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/mfbt/tests'
[task 2019-09-27T13:09:30.227Z] 13:09:30 INFO - /builds/worker/fetches/sccache/sccache /builds/worker/fetches/clang/bin/clang++ -o TestSHA1.o -c -I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers -include /builds/worker/workspace/build/src/config/gcc_hidden.h -DDEBUG=1 -DIMPL_MFBT -I/builds/worker/workspace/build/src/mfbt/tests -I/builds/worker/workspace/build/src/obj-firefox/mfbt/tests -I/builds/worker/workspace/build/src/obj-firefox/dist/include -I/builds/worker/workspace/build/src/obj-firefox/dist/include/testing -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nss -fPIC -DMOZILLA_CLIENT -include /builds/worker/workspace/build/src/obj-firefox/mozilla-config.h -Qunused-arguments -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -ftrivial-auto-var-init=pattern -Qunused-arguments -Wall -Wbitfield-enum-conversion -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtype-limits -Wunreachable-code -Wunreachable-code-return -Wwrite-strings -Wno-invalid-offsetof -Wclass-varargs -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wc++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wno-error=tautological-type-limit-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=backend-plugin -Wno-error=return-std-move -Wno-error=atomic-alignment -Wformat -Wformat-security -Wno-gnu-zero-variadic-macro-arguments -Wno-unknown-warning-option -Wno-return-type-c-linkage -D_GLIBCXX_USE_CXX11_ABI=0 -fno-sized-deallocation -fno-aligned-new -fcrash-diagnostics-dir=/builds/worker/artifacts -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -ftrivial-auto-var-init=pattern -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -Xclang -load -Xclang /builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -Os -fno-omit-frame-pointer -funwind-tables -Werror -Wno-error=shadow -MD -MP -MF .deps/TestSHA1.o.pp /builds/worker/workspace/build/src/mfbt/tests/TestSHA1.cpp
[task 2019-09-27T13:09:30.228Z] 13:09:30 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/mfbt/tests'
[task 2019-09-27T13:09:30.228Z] 13:09:30 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/mfbt/tests'
[task 2019-09-27T13:09:30.228Z] 13:09:30 INFO - mfbt/tests/TestSPSCQueue.o
[task 2019-09-27T13:09:30.228Z] 13:09:30 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/mfbt/tests'
[task 2019-09-27T13:09:30.417Z] 13:09:30 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/js/src/zydis'
[task 2019-09-27T13:09:30.417Z] 13:09:30 INFO - js/src/zydis/Register.o
...
[task 2019-09-27T13:09:32.535Z] 13:09:32 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/js/src/frontend'
[task 2019-09-27T13:09:32.535Z] 13:09:32 INFO - /builds/worker/workspace/build/src/config/recurse.mk:74: recipe for target 'js/src/frontend/target-objects' failed
[task 2019-09-27T13:09:32.535Z] 13:09:32 ERROR - make[3]: *** [js/src/frontend/target-objects] Error 2
[task 2019-09-27T13:09:32.535Z] 13:09:32 INFO - make[3]: *** Waiting for unfinished jobs....
[task 2019-09-27T13:09:32.543Z] 13:09:32 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/mfbt/tests'
[task 2019-09-27T13:09:32.543Z] 13:09:32 INFO - mfbt/tests/TestUtf8.o
[task 2019-09-27T13:09:32.543Z] 13:09:32 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/mfbt/tests'
...
Assignee | ||
Comment 14•6 years ago
|
||
Wait, what? The stack I attempted to land had this line entirely removed?
/me will investigate.
Comment 15•6 years ago
|
||
Comment 16•6 years ago
|
||
Comment 17•6 years ago
|
||
Backed out 6 changesets for causing spidermonkey bustages in BinASTTokenReaderContext.cpp
Backout link: https://hg.mozilla.org/integration/autoland/rev/18c3df086481c456a07733f74d82233b939f312f
Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=268810297&repo=autoland&lineNumber=13711
[task 2019-09-27T16:49:28.398Z] Testing jsapi-tests/binast/parser/context/spidermonkey/ecma_2/String/split-002.js
[task 2019-09-27T16:49:28.398Z] Assertion failure: uint32_t(1) << largestBitLength <= mozilla::MaxValue<InternalIndex>::value, at /builds/worker/workspace/build/src/js/src/frontend/BinASTTokenReaderContext.cpp:2047
[task 2019-09-27T16:49:28.414Z] in directory /builds/worker/workspace/build/src/obj-spider, running ['setarch', 'x86_64', '-R', 'make', 'check-jstests']
[task 2019-09-27T16:49:28.419Z] make -C js/src check-jstests
[task 2019-09-27T16:49:28.425Z] make[1]: Entering directory '/builds/worker/workspace/build/src/obj-spider/js/src'
[task 2019-09-27T16:49:28.425Z] ../../dist/bin/run-mozilla.sh /builds/worker/workspace/build/src/obj-spider/_virtualenvs/init/bin/python -u /builds/worker/workspace/build/src/js/src/tests/jstests.py
[task 2019-09-27T16:49:28.425Z] --no-progress --format=automation --timeout 300
[task 2019-09-27T16:49:28.425Z] --args='--dll /builds/worker/workspace/breakpad-tools/libbreakpadinjector.so' --exclude-file=/builds/worker/workspace/build/src/js/src/devtools/automation/arm64-jstests-slow.txt
[task 2019-09-27T16:49:28.425Z] ../../dist/bin/js
Comment 18•6 years ago
|
||
Comment 19•6 years ago
|
||
Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&resultStatus=testfailed%2Cbusted%2Cexception&revision=7ca0d7d8ff49a97ee96ef5a51e3be97c5e25948b&selectedJob=269008579
Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=269008579&repo=autoland&lineNumber=8335
Back-out link: https://hg.mozilla.org/integration/autoland/rev/5ef92c349945032dc2a9a31e3e0aeb8429ba7b21
Comment 20•6 years ago
|
||
Comment 22•6 years ago
|
||
Comment 23•6 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/6df178697e91
https://hg.mozilla.org/mozilla-central/rev/ec1278a1a78f
https://hg.mozilla.org/mozilla-central/rev/455940bf7977
https://hg.mozilla.org/mozilla-central/rev/1e1f1ab54bd8
https://hg.mozilla.org/mozilla-central/rev/1afa24c95583
https://hg.mozilla.org/mozilla-central/rev/a2a4dd2e870e
Updated•5 years ago
|
Description
•