mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 15:23:51 +00:00
9f2f58c1f3
This is a workaround for https://bugs.llvm.org/show_bug.cgi?id=40747 where clang's mangler crashes when it tries to mangle a symbol from the android NDK's <tuple> header. Differential Revision: https://phabricator.services.mozilla.com/D20766 --HG-- extra : moz-landing-system : lando
35 lines
1.3 KiB
Diff
35 lines
1.3 KiB
Diff
Workaround segfault in clang's mangling code that is tickled when
|
|
attempting to mangle the declaration:
|
|
std:__ndk1::__find_detail::__find_exactly_one_checked::__matches
|
|
in the <tuple> header in the Android NDK.
|
|
This codepath is exercised by MozsearchIndexer.cpp (the searchfox
|
|
indexer) when indexing on Android. See also
|
|
https://bugs.llvm.org/show_bug.cgi?id=40747
|
|
|
|
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
|
|
index 2dc04f2f3d8..054fc27003d 100644
|
|
--- a/clang/lib/AST/ItaniumMangle.cpp
|
|
+++ b/clang/lib/AST/ItaniumMangle.cpp
|
|
@@ -3495,16 +3495,21 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity) {
|
|
// ::= <expr-primary>
|
|
// <expr-primary> ::= L <type> <value number> E # integer literal
|
|
// ::= L <type <value float> E # floating literal
|
|
// ::= L <mangled-name> E # external name
|
|
// ::= fpT # 'this' expression
|
|
QualType ImplicitlyConvertedToType;
|
|
|
|
recurse:
|
|
+ if (!E) {
|
|
+ Out << "MOZ_WE_HACKED_AROUND_BUG_1500941";
|
|
+ return;
|
|
+ }
|
|
+
|
|
switch (E->getStmtClass()) {
|
|
case Expr::NoStmtClass:
|
|
#define ABSTRACT_STMT(Type)
|
|
#define EXPR(Type, Base)
|
|
#define STMT(Type, Base) \
|
|
case Expr::Type##Class:
|
|
#include "clang/AST/StmtNodes.inc"
|
|
// fallthrough
|