Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Clang] Fix __is_trivially_equality_comparable returning true with ineligebile defaulted overloads #93113

Merged

Conversation

philnik777
Copy link
Contributor

This changes __is_trivially_equality_comparable to do overload resolution instead, which fixes a couple of false-positives (and a false-negative as a drive-by).

Fixes #89293

Copy link

github-actions bot commented May 22, 2024

✅ With the latest revision this PR passed the C/C++ code formatter.

@philnik777 philnik777 force-pushed the fix_is_trivially_equality_comparable branch from 53b52a0 to 31e3346 Compare May 22, 2024 23:55
@philnik777 philnik777 marked this pull request as ready for review May 22, 2024 23:55
@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" labels May 22, 2024
@philnik777 philnik777 requested a review from AaronBallman May 22, 2024 23:56
@llvmbot
Copy link
Member

llvmbot commented May 22, 2024

@llvm/pr-subscribers-clang

Author: Nikolas Klauser (philnik777)

Changes

This changes __is_trivially_equality_comparable to do overload resolution instead, which fixes a couple of false-positives (and a false-negative as a drive-by).

Fixes #89293


Full diff: https://github.com/llvm/llvm-project/pull/93113.diff

5 Files Affected:

  • (modified) clang/docs/ReleaseNotes.rst (+3)
  • (modified) clang/include/clang/AST/Type.h (-3)
  • (modified) clang/lib/AST/Type.cpp (-60)
  • (modified) clang/lib/Sema/SemaExprCXX.cpp (+70-1)
  • (modified) clang/test/SemaCXX/type-traits.cpp (+28)
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 0c4a343b70009..cb662f520c4c3 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -606,6 +606,9 @@ Bug Fixes in This Version
 - ``__is_array`` and ``__is_bounded_array`` no longer return ``true`` for
   zero-sized arrays. Fixes (#GH54705).
 
+- ``__is_trivially_equality_comparable`` no longer returns true for types which
+  have a constrained defaulted comparison operator (#GH89293).
+
 Bug Fixes to Compiler Builtins
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 9a5c6e8d562c3..628c7a0d2df83 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -1126,9 +1126,6 @@ class QualType {
   /// Return true if this is a trivially relocatable type.
   bool isTriviallyRelocatableType(const ASTContext &Context) const;
 
-  /// Return true if this is a trivially equality comparable type.
-  bool isTriviallyEqualityComparableType(const ASTContext &Context) const;
-
   /// Returns true if it is a class and it might be dynamic.
   bool mayBeDynamicClass() const;
 
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index 3b90b8229dd18..62ca402460f94 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -2768,66 +2768,6 @@ bool QualType::isTriviallyRelocatableType(const ASTContext &Context) const {
   }
 }
 
-static bool
-HasNonDeletedDefaultedEqualityComparison(const CXXRecordDecl *Decl) {
-  if (Decl->isUnion())
-    return false;
-  if (Decl->isLambda())
-    return Decl->isCapturelessLambda();
-
-  auto IsDefaultedOperatorEqualEqual = [&](const FunctionDecl *Function) {
-    return Function->getOverloadedOperator() ==
-               OverloadedOperatorKind::OO_EqualEqual &&
-           Function->isDefaulted() && Function->getNumParams() > 0 &&
-           (Function->getParamDecl(0)->getType()->isReferenceType() ||
-            Decl->isTriviallyCopyable());
-  };
-
-  if (llvm::none_of(Decl->methods(), IsDefaultedOperatorEqualEqual) &&
-      llvm::none_of(Decl->friends(), [&](const FriendDecl *Friend) {
-        if (NamedDecl *ND = Friend->getFriendDecl()) {
-          return ND->isFunctionOrFunctionTemplate() &&
-                 IsDefaultedOperatorEqualEqual(ND->getAsFunction());
-        }
-        return false;
-      }))
-    return false;
-
-  return llvm::all_of(Decl->bases(),
-                      [](const CXXBaseSpecifier &BS) {
-                        if (const auto *RD = BS.getType()->getAsCXXRecordDecl())
-                          return HasNonDeletedDefaultedEqualityComparison(RD);
-                        return true;
-                      }) &&
-         llvm::all_of(Decl->fields(), [](const FieldDecl *FD) {
-           auto Type = FD->getType();
-           if (Type->isArrayType())
-             Type = Type->getBaseElementTypeUnsafe()->getCanonicalTypeUnqualified();
-
-           if (Type->isReferenceType() || Type->isEnumeralType())
-             return false;
-           if (const auto *RD = Type->getAsCXXRecordDecl())
-             return HasNonDeletedDefaultedEqualityComparison(RD);
-           return true;
-         });
-}
-
-bool QualType::isTriviallyEqualityComparableType(
-    const ASTContext &Context) const {
-  QualType CanonicalType = getCanonicalType();
-  if (CanonicalType->isIncompleteType() || CanonicalType->isDependentType() ||
-      CanonicalType->isEnumeralType() || CanonicalType->isArrayType())
-    return false;
-
-  if (const auto *RD = CanonicalType->getAsCXXRecordDecl()) {
-    if (!HasNonDeletedDefaultedEqualityComparison(RD))
-      return false;
-  }
-
-  return Context.hasUniqueObjectRepresentations(
-      CanonicalType, /*CheckIfTriviallyCopyable=*/false);
-}
-
 bool QualType::isNonWeakInMRRWithObjCWeak(const ASTContext &Context) const {
   return !Context.getLangOpts().ObjCAutoRefCount &&
          Context.getLangOpts().ObjCWeak &&
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index f543e006060d6..ccf678e666ecb 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -5199,6 +5199,75 @@ static bool HasNoThrowOperator(const RecordType *RT, OverloadedOperatorKind Op,
   return false;
 }
 
+static bool
+HasNonDeletedDefaultedEqualityComparison(Sema& S, const CXXRecordDecl *Decl) {
+  if (Decl->isUnion())
+    return false;
+  if (Decl->isLambda())
+    return Decl->isCapturelessLambda();
+
+  {
+    EnterExpressionEvaluationContext UnevaluatedContext(
+        S, Sema::ExpressionEvaluationContext::Unevaluated);
+    Sema::SFINAETrap SFINAE(S, /*AccessCheckingSFINAE=*/true);
+    Sema::ContextRAII TUContext(S, S.Context.getTranslationUnitDecl());
+
+    // const ClassT& obj;
+    OpaqueValueExpr Operand(
+        {}, Decl->getTypeForDecl()->getCanonicalTypeUnqualified().withConst(),
+        ExprValueKind::VK_LValue);
+    UnresolvedSet<16> Functions;
+    // obj == obj;
+    S.LookupBinOp(S.TUScope, {}, BinaryOperatorKind::BO_EQ, Functions);
+
+    auto Result = S.CreateOverloadedBinOp({}, BinaryOperatorKind::BO_EQ,
+                                          Functions, &Operand, &Operand);
+    if (Result.isInvalid() || SFINAE.hasErrorOccurred())
+      return false;
+    auto Callee = Result.getAs<CXXOperatorCallExpr>()->getDirectCallee();
+    auto ParamT = Callee->getParamDecl(0)->getType();
+    if (!Callee->isDefaulted() ||
+        (!ParamT->isReferenceType() && !Decl->isTriviallyCopyable()))
+      return false;
+  }
+
+  return llvm::all_of(Decl->bases(),
+                      [&](const CXXBaseSpecifier &BS) {
+                        if (const auto *RD = BS.getType()->getAsCXXRecordDecl())
+                          return HasNonDeletedDefaultedEqualityComparison(S,
+                                                                          RD);
+                        return true;
+                      }) &&
+         llvm::all_of(Decl->fields(), [&](const FieldDecl *FD) {
+           auto Type = FD->getType();
+           if (Type->isArrayType())
+             Type = Type->getBaseElementTypeUnsafe()
+                        ->getCanonicalTypeUnqualified();
+
+           if (Type->isReferenceType() || Type->isEnumeralType())
+             return false;
+           if (const auto *RD = Type->getAsCXXRecordDecl())
+             return HasNonDeletedDefaultedEqualityComparison(S, RD);
+           return true;
+         });
+}
+
+static bool isTriviallyEqualityComparableType(
+    Sema& S, QualType Type) {
+  QualType CanonicalType = Type.getCanonicalType();
+  if (CanonicalType->isIncompleteType() || CanonicalType->isDependentType() ||
+      CanonicalType->isEnumeralType() || CanonicalType->isArrayType())
+    return false;
+
+  if (const auto *RD = CanonicalType->getAsCXXRecordDecl()) {
+    if (!HasNonDeletedDefaultedEqualityComparison(S, RD))
+      return false;
+  }
+
+  return S.getASTContext().hasUniqueObjectRepresentations(
+      CanonicalType, /*CheckIfTriviallyCopyable=*/false);
+}
+
 static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT,
                                    SourceLocation KeyLoc,
                                    TypeSourceInfo *TInfo) {
@@ -5629,7 +5698,7 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT,
     Self.Diag(KeyLoc, diag::err_builtin_pass_in_regs_non_class) << T;
     return false;
   case UTT_IsTriviallyEqualityComparable:
-    return T.isTriviallyEqualityComparableType(C);
+    return isTriviallyEqualityComparableType(Self, T);
   }
 }
 
diff --git a/clang/test/SemaCXX/type-traits.cpp b/clang/test/SemaCXX/type-traits.cpp
index d40605f56f1ed..d06495e9cfb66 100644
--- a/clang/test/SemaCXX/type-traits.cpp
+++ b/clang/test/SemaCXX/type-traits.cpp
@@ -3885,8 +3885,36 @@ struct NotTriviallyEqualityComparableNonTriviallyEqualityComparableArrs2 {
 
   bool operator==(const NotTriviallyEqualityComparableNonTriviallyEqualityComparableArrs2&) const = default;
 };
+
 static_assert(!__is_trivially_equality_comparable(NotTriviallyEqualityComparableNonTriviallyEqualityComparableArrs2));
 
+template<bool B>
+struct MaybeTriviallyEqualityComparable {
+    int i;
+    bool operator==(const MaybeTriviallyEqualityComparable&) const requires B = default;
+    bool operator==(const MaybeTriviallyEqualityComparable& rhs) const { return (i % 3) == (rhs.i % 3); }
+};
+static_assert(__is_trivially_equality_comparable(MaybeTriviallyEqualityComparable<true>));
+static_assert(!__is_trivially_equality_comparable(MaybeTriviallyEqualityComparable<false>));
+
+struct NotTriviallyEqualityComparableMoreConstrainedExternalOp {
+  int i;
+  bool operator==(const NotTriviallyEqualityComparableMoreConstrainedExternalOp&) const = default;
+};
+
+bool operator==(const NotTriviallyEqualityComparableMoreConstrainedExternalOp&,
+                const NotTriviallyEqualityComparableMoreConstrainedExternalOp&) __attribute__((enable_if(true, ""))) {}
+
+static_assert(!__is_trivially_equality_comparable(NotTriviallyEqualityComparableMoreConstrainedExternalOp));
+
+struct TriviallyEqualityComparableExternalDefaultedOp {
+  int i;
+  friend bool operator==(TriviallyEqualityComparableExternalDefaultedOp, TriviallyEqualityComparableExternalDefaultedOp);
+};
+bool operator==(TriviallyEqualityComparableExternalDefaultedOp, TriviallyEqualityComparableExternalDefaultedOp) = default;
+
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableExternalDefaultedOp));
+
 namespace hidden_friend {
 
 struct TriviallyEqualityComparable {

@AMP999
Copy link
Contributor

AMP999 commented May 23, 2024

Could you explain a bit about why we check Decl->isTriviallyCopyable() here?

@AMP999
Copy link
Contributor

AMP999 commented May 23, 2024

This patch seems to break the following example (works in trunk, breaks after this patch). Could you please add a test case for this?
https://godbolt.org/z/rdn74xn9M

struct S {
  bool operator==(const S&) const = default;
};
struct Derived : S {
  int j_ = 0;
};

static_assert(!__is_trivially_equality_comparable(S));
static_assert(!__is_trivially_equality_comparable(Derived));

bool test1(Derived& a, Derived& b) {
  return a == b;
}

bool test2(Derived& a, Derived& b) {
  return a.j_ == b.j_;
}

@philnik777 philnik777 force-pushed the fix_is_trivially_equality_comparable branch 2 times, most recently from cabff59 to d1507bf Compare June 2, 2024 12:38
@philnik777
Copy link
Contributor Author

gentle ping

@AMP999
Copy link
Contributor

AMP999 commented Jun 13, 2024

LGTM now, for what it's worth.

@@ -1126,9 +1126,6 @@ class QualType {
/// Return true if this is a trivially relocatable type.
bool isTriviallyRelocatableType(const ASTContext &Context) const;

/// Return true if this is a trivially equality comparable type.
bool isTriviallyEqualityComparableType(const ASTContext &Context) const;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's unfortunate that the other traits are implemented directly on Type but this one is in SemaExprCXX.cpp and isn't possible to compute without access to Sema. ISTM we should be able to answer this question on the type rather than requiring semantic analysis (considering potential uses like in clang-tidy where there is no Sema available).

Perhaps another way to approach this is with the DefinitionData for classes -- as we add members to the class, we build up information about whether something is trivially copyable, etc and store that on the bits defined in CXXRecordDeclDefinitionBits.def. Maybe we could do the same for equality comparable types, then we can leave this interface in Type and do special handling if the type is a CXXRecordDecl. WDYT?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main problem with this is that you don't have to have a member. Take this test case for example:

struct NotTriviallyEqualityComparableMoreConstrainedExternalOp {
  int i;
  bool operator==(const NotTriviallyEqualityComparableMoreConstrainedExternalOp&) const = default;
};

bool operator==(const NotTriviallyEqualityComparableMoreConstrainedExternalOp&,
                const NotTriviallyEqualityComparableMoreConstrainedExternalOp&) __attribute__((enable_if(true, ""))) {}

static_assert(!__is_trivially_equality_comparable(NotTriviallyEqualityComparableMoreConstrainedExternalOp));

I'm sure this can also be written with some requires clause. Without the builtin telling the library there is no way to figure out that a free function instead of the member is called.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well shoot! That's... frustrating. What about splitting the logic between Type and Sema? e.g., Type tracks whether the type in isolation is trivially equality comparable, and Sema can use that to early return if a type is not trivially equality comparable in isolation and do additional semantic checking otherwise to provide the value for the trait.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're not actually storing any infomation for __is_trivially_equaltiy_comparable, so I'm not sure what the benefit would be? If we ever do that we can of course split things up to say "this definitely isn't trivially equaility comparable".

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, it's not that we already have this information, it's a different approach to your current patch so that the functionality continues to live on Type (the benefit is that external consumers like downstreams or clang-tidy could continue to use the same interface they always have but get slightly more accurate results from it). If that is more effort than it's worth, I don't insist -- I'm not aware of any breakage from your current changes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm. I'm not sure the is much use to "this is definitely not trivially equality comparable". Right now I think I'd rather just keep it in SemaExprCXX. If there comes up a use-case or we want to save some of the information we can still move some info into Type.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, I'm sold. Thanks for entertaining the idea!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Always happy to do that!

Copy link
Collaborator

@AaronBallman AaronBallman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@philnik777 philnik777 force-pushed the fix_is_trivially_equality_comparable branch from d1507bf to 3998e9a Compare June 27, 2024 21:32
@philnik777 philnik777 merged commit 5b36348 into llvm:main Jun 27, 2024
4 of 6 checks passed
@philnik777 philnik777 deleted the fix_is_trivially_equality_comparable branch June 27, 2024 21:32
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jun 27, 2024

LLVM Buildbot has detected a new failure on builder clang-ppc64be-linux-test-suite running on ppc64be-clang-test-suite while building clang at step 7 "test-build-unified-tree-check-runtimes".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/176/builds/463

Here is the relevant piece of the build log for the reference:

Step 7 (test-build-unified-tree-check-runtimes) failure: test (failure)
******************** TEST 'SanitizerCommon-lsan-powerpc64-Linux :: Linux/soft_rss_limit_mb_test.cpp' FAILED ********************
Exit Code: 1

Command Output (stderr):
--
RUN: at line 2: /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/build/./bin/clang  --driver-mode=g++ -gline-tables-only -fsanitize=leak  -m64 -funwind-tables  -I/home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test -ldl -O2 /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/soft_rss_limit_mb_test.cpp -o /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/build/runtimes/runtimes-bins/compiler-rt/test/sanitizer_common/lsan-powerpc64-Linux/Linux/Output/soft_rss_limit_mb_test.cpp.tmp
+ /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/build/./bin/clang --driver-mode=g++ -gline-tables-only -fsanitize=leak -m64 -funwind-tables -I/home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test -ldl -O2 /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/soft_rss_limit_mb_test.cpp -o /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/build/runtimes/runtimes-bins/compiler-rt/test/sanitizer_common/lsan-powerpc64-Linux/Linux/Output/soft_rss_limit_mb_test.cpp.tmp
RUN: at line 5: env LSAN_OPTIONS=soft_rss_limit_mb=220:quarantine_size=1:allocator_may_return_null=1      /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/build/runtimes/runtimes-bins/compiler-rt/test/sanitizer_common/lsan-powerpc64-Linux/Linux/Output/soft_rss_limit_mb_test.cpp.tmp 2>&1 | FileCheck /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/soft_rss_limit_mb_test.cpp -check-prefix=CHECK_MAY_RETURN_1
+ FileCheck /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/soft_rss_limit_mb_test.cpp -check-prefix=CHECK_MAY_RETURN_1
+ env LSAN_OPTIONS=soft_rss_limit_mb=220:quarantine_size=1:allocator_may_return_null=1 /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/build/runtimes/runtimes-bins/compiler-rt/test/sanitizer_common/lsan-powerpc64-Linux/Linux/Output/soft_rss_limit_mb_test.cpp.tmp
/home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/soft_rss_limit_mb_test.cpp:68:24: error: CHECK_MAY_RETURN_1: expected string not found in input
// CHECK_MAY_RETURN_1: allocating 512 times
                       ^
<stdin>:54:44: note: scanning from here
Some of the malloc calls returned non-null: 256
                                           ^
<stdin>:55:13: note: possible intended match here
==162938==LeakSanitizer: soft rss limit unexhausted (220Mb vs 205Mb)
            ^

Input file: <stdin>
Check file: /home/buildbots/llvm-external-buildbots/workers/ppc64be-clang-test-suite/clang-ppc64be-test-suite/llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/soft_rss_limit_mb_test.cpp

-dump-input=help explains the following input dump.

Input was:
<<<<<<
            .
            .
            .
           49:  [256] 
           50:  [320] 
           51:  [384] 
           52:  [448] 
           53: Some of the malloc calls returned null: 256 
           54: Some of the malloc calls returned non-null: 256 
check:68'0                                                X~~~~ error: no match found
           55: ==162938==LeakSanitizer: soft rss limit unexhausted (220Mb vs 205Mb) 
check:68'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:68'1                 ?                                                         possible intended match
>>>>>>

--

********************


@ZequanWu
Copy link
Contributor

This causes clang to crash when building chromium:

Assertion failed: (Loc.isValid() && "point of instantiation must be valid!"), function setPointOfInstantiation, file DeclTemplate.h, line 1938.
PLEASE submit a bug report to https://crbug.com in the Tools>LLVM component, run tools/clang/scripts/process_crashreports.py (only if inside Google) to upload crash related files, and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.	Program arguments: ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/third_party/webrtc/pc/rtp_transmission_manager/rtp_transmission_manager.o.d -DOFFICIAL_BUILD -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE -D__ARM_NEON__=1 -DCR_XCODE_VERSION=1500 -DCR_CLANG_REVISION=\"llvmorg-19-init-15776-ge48c4011-0\" -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS -DCR_LIBCXX_REVISION=09b99fd8ab300c93ff7b8df6688cafb27bd3db28 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DWEBRTC_ENABLE_PROTOBUF=1 -DWEBRTC_STRICT_FIELD_TRIALS=0 -DRTC_ENABLE_VP9 -DRTC_ENABLE_H265 -DRTC_DAV1D_IN_INTERNAL_DECODER_FACTORY -DWEBRTC_HAVE_SCTP -DENABLE_EXTERNAL_AUTH -DWEBRTC_USE_H264 -DHAVE_WEBRTC_VIDEO -DLOGGING_INSIDE_WEBRTC -DWEBRTC_ARCH_ARM64 -DWEBRTC_HAS_NEON -DRTC_USE_PERFETTO -DWEBRTC_LIBRARY_IMPL -DWEBRTC_ENABLE_AVX2 -DWEBRTC_CHROMIUM_BUILD -DWEBRTC_POSIX -DWEBRTC_MAC -DABSL_ALLOCATOR_NOTHROW=1 -DLIBYUV_DISABLE_LSX -DLIBYUV_DISABLE_LASX -I../.. -Igen -I../../buildtools/third_party/libc++ -I../../third_party/webrtc_overrides -I../../third_party/webrtc -Igen/third_party/webrtc -I../../third_party/abseil-cpp -I../../third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -I../../third_party/libyuv/include -I../../base/allocator/partition_allocator/src -Igen/base/allocator/partition_allocator/src -I../../third_party/boringssl/src/include -I../../third_party/protobuf/src -Igen/protoc_out -Wall -Wextra -Wimplicit-fallthrough -Wextra-semi -Wunreachable-code-aggressive -Wthread-safety -Wunguarded-availability -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -Wloop-analysis -Wno-unneeded-internal-declaration -Wno-cast-function-type -Wno-ignored-pragma-optimize -Wno-deprecated-builtins -Wno-deprecated-this-capture -Wno-invalid-offsetof -Wno-vla-extension -Wno-thread-safety-reference-return -Wshadow -Werror -fno-delete-null-pointer-checks -fno-ident -fno-strict-aliasing -fstack-protector -fcolor-diagnostics -fmerge-all-constants -fno-sized-deallocation -fcrash-diagnostics-dir=../../tools/clang/crashreports -mllvm -instcombine-lower-dbg-declare=0 -mllvm -split-threshold-for-reg-with-hint=0 -ffp-contract=off -flto=thin -fsplit-lto-unit -mllvm -inlinehint-threshold=360 -fwhole-program-vtables -fcomplete-member-pointers --target=arm64-apple-macos -mno-outline -no-canonical-prefixes -ftrivial-auto-var-init=pattern -O2 -fno-math-errno -fno-omit-frame-pointer -fno-standalone-debug -g2 -gdwarf-aranges -Xclang -debug-info-kind=limited -isysroot ../../build/mac_files/xcode_binaries/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacos-version-min=10.15 -fprofile-use=../../chrome/build/pgo_profiles/chrome-mac-arm-main-1719532733-22346236a77819af9911adca57b0117b3bed6727-07d9695ebcbe87f7704e609d7c4e5ad21ca1a5d6.profdata -Wno-profile-instr-unprofiled -Wno-profile-instr-out-of-date -Wno-backend-plugin -fvisibility=hidden -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang span-ctor-from-string-literal -Xclang -plugin-arg-find-bad-constructs -Xclang raw-ref-template-as-trivial-member -Xclang -plugin-arg-find-bad-constructs -Xclang check-stack-allocated -Xclang -plugin-arg-find-bad-constructs -Xclang check-allow-auto-typedefs-better-nested -Xclang -add-plugin -Xclang raw-ptr-plugin -Xclang -plugin-arg-raw-ptr-plugin -Xclang check-raw-ptr-to-stack-allocated -Xclang -plugin-arg-raw-ptr-plugin -Xclang disable-check-raw-ptr-to-stack-allocated-error -Xclang -plugin-arg-raw-ptr-plugin -Xclang raw-ptr-exclude-path=/renderer/ -Xclang -plugin-arg-raw-ptr-plugin -Xclang raw-ptr-exclude-path=../../third_party/blink/public/web/ -Xclang -plugin-arg-raw-ptr-plugin -Xclang raw-ptr-exclude-path=../../third_party/dawn/ -DUNSAFE_BUFFERS_BUILD -Xclang -add-plugin -Xclang unsafe-buffers -Xclang -plugin-arg-unsafe-buffers -Xclang ../../build/config/unsafe_buffers_paths.txt -Wexit-time-destructors -Wglobal-constructors -Wno-shadow -Wctad-maybe-unsupported -DPROTOBUF_ALLOW_DEPRECATED=1 -Wenum-compare-conditional -Wno-c++11-narrowing-const-reference -Wno-missing-template-arg-list-after-template-kw -std=c++20 -Wno-trigraphs -fno-exceptions -fno-rtti -nostdinc++ -isystem../../third_party/libc++/src/include -isystem../../third_party/libc++abi/src/include -fvisibility-inlines-hidden -c ../../third_party/webrtc/pc/rtp_transmission_manager.cc -o obj/third_party/webrtc/pc/rtp_transmission_manager/rtp_transmission_manager.o
1.	../../third_party/webrtc/pc/transceiver_list.h:121:76: current parser token ')'
2.	../../third_party/webrtc/pc/transceiver_list.h:33:1: parsing namespace 'webrtc'
3.	../../third_party/webrtc/pc/transceiver_list.h:94:1: parsing struct/union/class body 'webrtc::TransceiverList'
4.	../../third_party/webrtc/pc/transceiver_list.h:118:54: parsing function body 'webrtc::TransceiverList::Remove'
5.	../../third_party/webrtc/pc/transceiver_list.h:118:54: in compound statement ('{}')
6.	../../third_party/libc++/src/include/__algorithm/remove.h:28:1: instantiating function definition 'std::remove<std::__wrap_iter<webrtc::scoped_refptr<webrtc::RtpTransceiverProxyWithInternal<webrtc::RtpTransceiver>> *>, webrtc::scoped_refptr<webrtc::RtpTransceiverProxyWithInternal<webrtc::RtpTransceiver>>>'
7.	../../third_party/libc++/src/include/__algorithm/find.h:171:1: instantiating function definition 'std::find<std::__wrap_iter<webrtc::scoped_refptr<webrtc::RtpTransceiverProxyWithInternal<webrtc::RtpTransceiver>> *>, webrtc::scoped_refptr<webrtc::RtpTransceiverProxyWithInternal<webrtc::RtpTransceiver>>>'
8.	../../third_party/libc++/src/include/__type_traits/is_equality_comparable.h:51:8: instantiating class definition 'std::__libcpp_is_trivially_equality_comparable_impl<webrtc::scoped_refptr<webrtc::RtpTransceiverProxyWithInternal<webrtc::RtpTransceiver>>, webrtc::scoped_refptr<webrtc::RtpTransceiverProxyWithInternal<webrtc::RtpTransceiver>>>'
  #0 0x0000000106554448 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x101cb8448)
  #1 0x0000000106552530 llvm::sys::RunSignalHandlers() (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x101cb6530)
  #2 0x0000000106553a40 llvm::sys::CleanupOnSignal(unsigned long) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x101cb7a40)
  #3 0x00000001064d8b64 CrashRecoverySignalHandler(int) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x101c3cb64)
  #4 0x0000000187d1f584 (/usr/lib/system/libsystem_platform.dylib+0x180477584)
  #5 0x0000000187ceec20 (/usr/lib/system/libsystem_pthread.dylib+0x180446c20)
  #6 0x0000000187bfba20 (/usr/lib/system/libsystem_c.dylib+0x180353a20)
  #7 0x0000000187bfad10 (/usr/lib/system/libsystem_c.dylib+0x180352d10)
  #8 0x00000001088f0b3c clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104054b3c)
  #9 0x00000001088f1e58 clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104055e58)
 #10 0x00000001089cef6c void llvm::function_ref<void ()>::callback_fn<clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*)::$_0>(long) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104132f6c)
 #11 0x0000000107fdb6b0 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10373f6b0)
 #12 0x00000001089b8280 clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10411c280)
 #13 0x00000001085b2a60 addAssociatedClassesAndNamespaces((anonymous namespace)::AssociatedLookup&, clang::QualType) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103d16a60)
 #14 0x00000001085b2a04 addAssociatedClassesAndNamespaces((anonymous namespace)::AssociatedLookup&, clang::QualType) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103d16a04)
 #15 0x00000001085b238c clang::Sema::FindAssociatedClassesAndNamespaces(clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, llvm::SmallSetVector<clang::DeclContext*, 16u>&, llvm::SmallSetVector<clang::CXXRecordDecl*, 16u>&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103d1638c)
 #16 0x00000001085b5124 clang::Sema::ArgumentDependentLookup(clang::DeclarationName, clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, clang::ADLResult&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103d19124)
 #17 0x00000001086e9000 clang::Sema::AddArgumentDependentLookupCandidates(clang::DeclarationName, clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, clang::TemplateArgumentListInfo*, clang::OverloadCandidateSet&, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e4d000)
 #18 0x00000001086f50dc clang::Sema::LookupOverloadedBinOp(clang::OverloadCandidateSet&, clang::OverloadedOperatorKind, clang::UnresolvedSetImpl const&, llvm::ArrayRef<clang::Expr*>, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e590dc)
 #19 0x00000001086f55d0 clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&, clang::Expr*, clang::Expr*, bool, bool, clang::FunctionDecl*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e595d0)
 #20 0x0000000108498074 HasNonDeletedDefaultedEqualityComparison(clang::Sema&, clang::CXXRecordDecl const*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103bfc074)
 #21 0x0000000108497c0c isTriviallyEqualityComparableType(clang::Sema&, clang::QualType) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103bfbc0c)
 #22 0x00000001084899cc EvaluateBooleanTypeTrait(clang::Sema&, clang::TypeTrait, clang::SourceLocation, llvm::ArrayRef<clang::TypeSourceInfo*>, clang::SourceLocation, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103bed9cc)
 #23 0x0000000108488150 clang::Sema::BuildTypeTrait(clang::TypeTrait, clang::SourceLocation, llvm::ArrayRef<clang::TypeSourceInfo*>, clang::SourceLocation) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103bec150)
 #24 0x00000001088f9e34 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTypeTraitExpr(clang::TypeTraitExpr*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10405de34)
 #25 0x000000010890686c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10406a86c)
 #26 0x00000001088f363c (anonymous namespace)::TemplateInstantiator::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10405763c)
 #27 0x0000000108912054 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104076054)
 #28 0x0000000108919e8c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10407de8c)
 #29 0x00000001088ed26c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10405126c)
 #30 0x0000000108916a38 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformElaboratedType(clang::TypeLocBuilder&, clang::ElaboratedTypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10407aa38)
 #31 0x00000001088ecf88 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104050f88)
 #32 0x00000001088ec7b8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1040507b8)
 #33 0x00000001088efaf4 clang::Sema::SubstBaseSpecifiers(clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104053af4)
 #34 0x00000001088f02d8 clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1040542d8)
 #35 0x00000001088f1e58 clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104055e58)
 #36 0x00000001089cef6c void llvm::function_ref<void ()>::callback_fn<clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*)::$_0>(long) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104132f6c)
 #37 0x0000000107fdb6b0 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10373f6b0)
 #38 0x00000001089b8280 clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10411c280)
 #39 0x00000001089b7b44 clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10411bb44)
 #40 0x000000010800a130 clang::Sema::RequireCompleteDeclContext(clang::CXXScopeSpec&, clang::DeclContext*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10376e130)
 #41 0x00000001085b1434 clang::Sema::LookupParsedName(clang::LookupResult&, clang::Scope*, clang::CXXScopeSpec*, clang::QualType, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103d15434)
 #42 0x0000000108329ad0 clang::Sema::BuildQualifiedDeclarationNameExpr(clang::CXXScopeSpec&, clang::DeclarationNameInfo const&, bool, clang::TypeSourceInfo**) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a8dad0)
 #43 0x00000001089079d0 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr(clang::DependentScopeDeclRefExpr*, bool, clang::TypeSourceInfo**) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10406b9d0)
 #44 0x00000001089068b8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10406a8b8)
 #45 0x000000010890686c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10406a86c)
 #46 0x00000001088f363c (anonymous namespace)::TemplateInstantiator::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10405763c)
 #47 0x0000000108912054 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104076054)
 #48 0x0000000108919e8c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10407de8c)
 #49 0x00000001088ed26c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10405126c)
 #50 0x0000000108916a38 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformElaboratedType(clang::TypeLocBuilder&, clang::ElaboratedTypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10407aa38)
 #51 0x00000001088ecf88 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104050f88)
 #52 0x00000001088ec7b8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1040507b8)
 #53 0x00000001088ed4a4 clang::Sema::SubstType(clang::QualType, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1040514a4)
 #54 0x000000010877c1cc clang::Sema::CheckTemplateArgument(clang::NamedDecl*, clang::TemplateArgumentLoc&, clang::NamedDecl*, clang::SourceLocation, clang::SourceLocation, unsigned int, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, clang::Sema::CheckTemplateArgumentKind) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103ee01cc)
 #55 0x0000000108878bc0 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103fdcbc0)
 #56 0x00000001088e6ce4 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::$_2>(long) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10404ace4)
 #57 0x0000000107fdb6b0 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10373f6b0)
 #58 0x000000010887ad04 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103fded04)
 #59 0x00000001086e182c clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, bool, clang::CallExpr::ADLCallKind, clang::OverloadCandidateParamOrder, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e4582c)
 #60 0x00000001086f20e8 AddOverloadedCallCandidate(clang::Sema&, clang::DeclAccessPair, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e560e8)
 #61 0x00000001086f1f38 clang::Sema::AddOverloadedCallCandidates(clang::UnresolvedLookupExpr*, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e55f38)
 #62 0x00000001086f2444 clang::Sema::buildOverloadedCallSet(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::OverloadCandidateSet*, clang::ActionResult<clang::Expr*, true>*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e56444)
 #63 0x00000001086f2814 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e56814)
 #64 0x0000000108321c60 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a85c60)
 #65 0x00000001083365c0 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a9a5c0)
 #66 0x0000000108901f28 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104065f28)
 #67 0x00000001088f5348 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExprs(clang::Expr* const*, unsigned int, bool, llvm::SmallVectorImpl<clang::Expr*>&, bool*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104059348)
 #68 0x0000000108901dec clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104065dec)
 #69 0x000000010891d6b4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1040816b4)
 #70 0x0000000108908f78 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10406cf78)
 #71 0x00000001088f2b50 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104056b50)
 #72 0x000000010894a6e8 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1040ae6e8)
 #73 0x000000010844d658 void llvm::function_ref<void ()>::callback_fn<clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool)::$_0>(long) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103bb1658)
 #74 0x0000000107fdb6b0 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10373f6b0)
 #75 0x000000010835ca48 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103ac0a48)
 #76 0x00000001083611d8 MarkExprReferenced(clang::Sema&, clang::SourceLocation, clang::Decl*, clang::Expr*, bool, llvm::DenseMap<clang::VarDecl const*, int, llvm::DenseMapInfo<clang::VarDecl const*, void>, llvm::detail::DenseMapPair<clang::VarDecl const*, int>>&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103ac51d8)
 #77 0x0000000108327958 clang::Sema::MarkDeclRefReferenced(clang::DeclRefExpr*, clang::Expr const*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a8b958)
 #78 0x0000000108327180 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a8b180)
 #79 0x00000001086f0edc clang::Sema::FixOverloadedFunctionReference(clang::Expr*, clang::DeclAccessPair, clang::FunctionDecl*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e54edc)
 #80 0x00000001086f2b3c FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e56b3c)
 #81 0x00000001086f2974 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e56974)
 #82 0x0000000108321c60 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a85c60)
 #83 0x00000001083365c0 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a9a5c0)
 #84 0x0000000108901f28 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104065f28)
 #85 0x00000001089068b8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10406a8b8)
 #86 0x00000001088f2bdc clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104056bdc)
 #87 0x0000000108908f78 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10406cf78)
 #88 0x00000001088f2b50 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x104056b50)
 #89 0x000000010894a6e8 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1040ae6e8)
 #90 0x000000010844d658 void llvm::function_ref<void ()>::callback_fn<clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool)::$_0>(long) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103bb1658)
 #91 0x0000000107fdb6b0 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10373f6b0)
 #92 0x000000010835ca48 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103ac0a48)
 #93 0x00000001083611d8 MarkExprReferenced(clang::Sema&, clang::SourceLocation, clang::Decl*, clang::Expr*, bool, llvm::DenseMap<clang::VarDecl const*, int, llvm::DenseMapInfo<clang::VarDecl const*, void>, llvm::detail::DenseMapPair<clang::VarDecl const*, int>>&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103ac51d8)
 #94 0x0000000108327958 clang::Sema::MarkDeclRefReferenced(clang::DeclRefExpr*, clang::Expr const*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a8b958)
 #95 0x0000000108327180 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a8b180)
 #96 0x00000001086f0edc clang::Sema::FixOverloadedFunctionReference(clang::Expr*, clang::DeclAccessPair, clang::FunctionDecl*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e54edc)
 #97 0x00000001086f2b3c FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e56b3c)
 #98 0x00000001086f2974 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103e56974)
 #99 0x0000000108321c60 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a85c60)
#100 0x00000001083365c0 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103a9a5c0)
#101 0x0000000107eb2f7c clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103616f7c)
#102 0x0000000107eb4af8 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103618af8)
#103 0x0000000107eb6ae4 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10361aae4)
#104 0x0000000107eb07d0 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1036147d0)
#105 0x0000000107ebbf38 clang::Parser::ParseExpressionList(llvm::SmallVectorImpl<clang::Expr*>&, llvm::function_ref<void ()>, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10361ff38)
#106 0x0000000107eb2e20 clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103616e20)
#107 0x0000000107eb4af8 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103618af8)
#108 0x0000000107eb07d0 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1036147d0)
#109 0x0000000107eb06c0 clang::Parser::ParseExpression(clang::Parser::TypeCastState) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1036146c0)
#110 0x0000000107e93e78 clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035f7e78)
#111 0x0000000107e92114 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035f6114)
#112 0x0000000107e91a68 clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035f5a68)
#113 0x0000000107e9a88c clang::Parser::ParseCompoundStatementBody(bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035fe88c)
#114 0x0000000107e9b868 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035ff868)
#115 0x0000000107e8f870 clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035f3870)
#116 0x0000000107e8e198 clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035f2198)
#117 0x0000000107f0bc20 clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10366fc20)
#118 0x0000000107f09c24 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10366dc24)
#119 0x0000000107ee8c40 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10364cc40)
#120 0x0000000107f20e60 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103684e60)
#121 0x0000000107f20a90 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103684a90)
#122 0x0000000107f1fb98 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103683b98)
#123 0x0000000107f0114c clang::Parser::ParseInnerNamespace(llvm::SmallVector<clang::Parser::InnerNamespaceInfo, 4u> const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10366514c)
#124 0x0000000107f0029c clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, clang::SourceLocation) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10366429c)
#125 0x0000000107ee3448 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103647448)
#126 0x0000000107f1f754 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103683754)
#127 0x0000000107f1dcd8 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x103681cd8)
#128 0x0000000107e49f50 clang::ParseAST(clang::Sema&, bool, bool) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1035adf50)
#129 0x000000010704f0a8 clang::FrontendAction::Execute() (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1027b30a8)
#130 0x0000000106fcd560 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x102731560)
#131 0x0000000107130bdc clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x102894bdc)
#132 0x00000001048a2548 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x100006548)
#133 0x000000010489f8b0 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1000038b0)
#134 0x0000000106e69d1c void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0>(long) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1025cdd1c)
#135 0x00000001064d887c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x101c3c87c)
#136 0x0000000106e69358 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1025cd358)
#137 0x0000000106e2e934 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x102592934)
#138 0x0000000106e2ebb4 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&, bool) const (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x102592bb4)
#139 0x0000000106e4adcc clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x1025aedcc)
#140 0x000000010489ee20 clang_main(int, char**, llvm::ToolContext const&) (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x100002e20)
#141 0x00000001048ab810 main (/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/bin/clang-19+0x10000f810)
#142 0x00000001879660e0 
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 19.0.0git (https://chromium.googlesource.com/a/external/github.com/llvm/llvm-project e48c4011ca80385573f1b92793c75dc98abb228f)
Target: arm64-apple-macos
Thread model: posix
InstalledDir: ../../third_party/llvm-build/Release+Asserts/bin
Build config: +assertions
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: ../../tools/clang/crashreports/rtp_transmission_manager-8cce12.cpp
clang++: note: diagnostic msg: ../../tools/clang/crashreports/rtp_transmission_manager-8cce12.sh
clang++: note: diagnostic msg: Crash backtrace is located in
clang++: note: diagnostic msg: /Users/chrome-bot/Library/Logs/DiagnosticReports/clang++_<YYYY-MM-DD-HHMMSS>_<hostname>.crash
clang++: note: diagnostic msg: (choose the .crash file that corresponds to your crash)
clang++: note: diagnostic msg: 

I'm running creduce to get a smaller repro for it.

@ZequanWu
Copy link
Contributor

Reverting for now as this also breaks LLVM CI builder.

@philnik777
Copy link
Contributor Author

@ZequanWu Could you give me a reproducer? Ther CI failure looks pretty unrelated to me, since it complains about LeakSanitizer. The next build was also green.

@ZequanWu
Copy link
Contributor

I have a partially reduced repro:

$ clang++ "-cc1" "-triple" "arm64-apple-macosx10.15.0" "-Wundef-prefix=TARGET_OS_" "-Werror=undef-prefix" "-Wdeprecated-objc-isa-usage" "-Werror=deprecated-objc-isa-usage" "-emit-llvm-bc" "-flto=thin" "-flto-unit" "-disable-free" "-clear-ast-before-backend" "-main-file-name" "rtp_transmission_manager.cc" "-mrelocation-model" "pic" "-pic-level" "2" "-fmerge-all-constants" "-fno-delete-null-pointer-checks" "-mframe-pointer=non-leaf" "-relaxed-aliasing" "-ffp-contract=off" "-fno-rounding-math" "-target-sdk-version=14.0" "-fcompatibility-qualified-id-block-type-checking" "-fvisibility-inlines-hidden-static-local-var" "-fbuiltin-headers-in-system-modules" "-fdefine-target-os-macros" "-target-cpu" "apple-m1" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.4a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+predres" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sb" "-target-feature" "+sha2" "-target-feature" "+sha3" "-target-feature" "+neon" "-target-feature" "+ssbs" "-target-abi" "darwinpcs" "-debug-info-kind=constructor" "-dwarf-version=4" "-debugger-tuning=lldb" "-mllvm" "-generate-arange-section" "-fdebug-compilation-dir=/Volumes/Work/s/w/ir/cache/builder/src/out/Release" "-target-linker-version" "1053.12"  "-fcoverage-compilation-dir=/Volumes/Work/s/w/ir/cache/builder/src/out/Release" "-nostdinc++" "-D" "OFFICIAL_BUILD" "-D" "__STDC_CONSTANT_MACROS" "-D" "__STDC_FORMAT_MACROS" "-D" "_FORTIFY_SOURCE=2" "-D" "_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE" "-D" "__ARM_NEON__=1" "-D" "CR_XCODE_VERSION=1500" "-D" "CR_CLANG_REVISION=\"llvmorg-19-init-15776-ge48c4011-0\"" "-D" "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" "-D" "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" "-D" "CR_LIBCXX_REVISION=09b99fd8ab300c93ff7b8df6688cafb27bd3db28" "-D" "NDEBUG" "-D" "NVALGRIND" "-D" "DYNAMIC_ANNOTATIONS_ENABLED=0" "-D" "WEBRTC_ENABLE_PROTOBUF=1" "-D" "WEBRTC_STRICT_FIELD_TRIALS=0" "-D" "RTC_ENABLE_VP9" "-D" "RTC_ENABLE_H265" "-D" "RTC_DAV1D_IN_INTERNAL_DECODER_FACTORY" "-D" "WEBRTC_HAVE_SCTP" "-D" "ENABLE_EXTERNAL_AUTH" "-D" "WEBRTC_USE_H264" "-D" "HAVE_WEBRTC_VIDEO" "-D" "LOGGING_INSIDE_WEBRTC" "-D" "WEBRTC_ARCH_ARM64" "-D" "WEBRTC_HAS_NEON" "-D" "RTC_USE_PERFETTO" "-D" "WEBRTC_LIBRARY_IMPL" "-D" "WEBRTC_ENABLE_AVX2" "-D" "WEBRTC_CHROMIUM_BUILD" "-D" "WEBRTC_POSIX" "-D" "WEBRTC_MAC" "-D" "ABSL_ALLOCATOR_NOTHROW=1" "-D" "LIBYUV_DISABLE_LSX" "-D" "LIBYUV_DISABLE_LASX" "-D" "UNSAFE_BUFFERS_BUILD" "-D" "PROTOBUF_ALLOW_DEPRECATED=1" "-O2" "-Wall" "-Wextra" "-Wimplicit-fallthrough" "-Wextra-semi" "-Wunreachable-code-aggressive" "-Wthread-safety" "-Wunguarded-availability" "-Wno-missing-field-initializers" "-Wno-unused-parameter" "-Wno-psabi" "-Wloop-analysis" "-Wno-unneeded-internal-declaration" "-Wno-cast-function-type" "-Wno-ignored-pragma-optimize" "-Wno-deprecated-builtins" "-Wno-deprecated-this-capture" "-Wno-invalid-offsetof" "-Wno-vla-extension" "-Wno-thread-safety-reference-return" "-Wshadow" "-Werror" "-Wno-profile-instr-unprofiled" "-Wno-profile-instr-out-of-date" "-Wno-backend-plugin" "-Wheader-hygiene" "-Wstring-conversion" "-Wtautological-overlap-compare" "-Wexit-time-destructors" "-Wglobal-constructors" "-Wno-shadow" "-Wctad-maybe-unsupported" "-Wenum-compare-conditional" "-Wno-c++11-narrowing-const-reference" "-Wno-missing-template-arg-list-after-template-kw" "-Wno-trigraphs" "-std=c++20" "-fdeprecated-macro" "-ferror-limit" "19" "-fvisibility=hidden" "-fvisibility-inlines-hidden" "-stack-protector" "1" "-ftrivial-auto-var-init=pattern" "-fblocks" "-fencode-extended-block-signature" "-fno-rtti" "-fregister-global-dtors-with-atexit" "-fgnuc-version=4.2.1" "-fno-implicit-modules" "-fskip-odr-check-in-gmf" "-fno-sized-deallocation" "-fmax-type-align=16" "-Qn" "-fcolor-diagnostics" "-vectorize-loops" "-vectorize-slp" "-debug-info-kind=limited" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c++" rtp_transmission_manager.cpp

I have to rename the attached file to *.txt as github doesn't allow .cpp suffix.
rtp_transmission_manager.txt

@philnik777
Copy link
Contributor Author

@ZequanWu I can't successfully build your reproducer with clang trunk. Would it be possible to provide the full test case or a fully reduced one?

@ZequanWu
Copy link
Contributor

@ZequanWu I can't successfully build your reproducer with clang trunk. Would it be possible to provide the full test case or a fully reduced one?

Because I reverted this change at 567b2c6, so it no longer crashes. If you recommit this or checkout to 5b36348, you can repro the crash.

@philnik777
Copy link
Contributor Author

@ZequanWu I can't successfully build your reproducer with clang trunk. Would it be possible to provide the full test case or a fully reduced one?

Because I reverted this change at 567b2c6, so it no longer crashes. If you recommit this or checkout to 5b36348, you can repro the crash.

No, I mean it isn't a well-formed program. There are semicolons missing after class definitions.

@ZequanWu
Copy link
Contributor

@ZequanWu I can't successfully build your reproducer with clang trunk. Would it be possible to provide the full test case or a fully reduced one?

Because I reverted this change at 567b2c6, so it no longer crashes. If you recommit this or checkout to 5b36348, you can repro the crash.

No, I mean it isn't a well-formed program. There are semicolons missing after class definitions.

That's caused by creduce but it shouldn't matter (clang shouldn't crash due to syntax errors). I attached the original crash source here as creduce is still running. The command to repro is same as above.
rtp_transmission_manager-8cce12.txt

@philnik777
Copy link
Contributor Author

@ZequanWu I can't successfully build your reproducer with clang trunk. Would it be possible to provide the full test case or a fully reduced one?

Because I reverted this change at 567b2c6, so it no longer crashes. If you recommit this or checkout to 5b36348, you can repro the crash.

No, I mean it isn't a well-formed program. There are semicolons missing after class definitions.

That's caused by creduce but it shouldn't matter (clang shouldn't crash due to syntax errors). I attached the original crash source here as creduce is still running. The command to repro is same as above. rtp_transmission_manager-8cce12.txt

Yes, but it's a lot easier to reduce a file without errors, at least for me. (And FWIW I'd also question reverting a bug fix that could result into bad code gen because of a crash-on-invalid it introduced)

lravenclaw pushed a commit to lravenclaw/llvm-project that referenced this pull request Jul 3, 2024
…eligebile defaulted overloads (llvm#93113)

This changes `__is_trivially_equality_comparable` to do overload
resolution instead, which fixes a couple of false-positives (and a
false-negative as a drive-by).

Fixes llvm#89293
lravenclaw pushed a commit to lravenclaw/llvm-project that referenced this pull request Jul 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

__is_trivially_equality_comparable(T) false positive when the defaulted operator is ineligible
6 participants