chromium-112-gcc-13-0023-gcc-incomplete-type-v8-subtype.patch 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. https://chromium-review.googlesource.com/c/v8/v8/+/4394663
  2. From c5ab3e4f0c5a3ce880941184ef8447c27cd19a93 Mon Sep 17 00:00:00 2001
  3. From: Stephan Hartmann <stha09@googlemail.com>
  4. Date: Mon, 03 Apr 2023 12:19:34 +0200
  5. Subject: [PATCH] libstdc++: fix incomplete type in v8::internal::is_subtype<T, U>
  6. Using std::convertible with incomplete types is UB. However, till
  7. GCC 12 it was accepted and std::convertible returned false.
  8. This fails now for e.g. v8::internal::WasmArray. Use
  9. std::disjunction and std::conjunction instead which are short-
  10. circuiting, because std::is_base_of<T, T> is already true.
  11. Bug: chromium:957519
  12. Change-Id: Ia26643dbdf0fb00d5586c71ae6b18e8d0f3cf96e
  13. Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4394663
  14. Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
  15. Reviewed-by: Clemens Backes <clemensb@chromium.org>
  16. Cr-Commit-Position: refs/heads/main@{#86904}
  17. ---
  18. diff --git a/src/codegen/tnode.h b/src/codegen/tnode.h
  19. index 3a8f844..c1de483 100644
  20. --- a/v8/src/codegen/tnode.h
  21. +++ b/v8/src/codegen/tnode.h
  22. @@ -270,8 +270,9 @@
  23. template <class T, class U>
  24. struct is_subtype {
  25. static const bool value =
  26. - std::is_base_of<U, T>::value || (std::is_same<U, MaybeObject>::value &&
  27. - std::is_convertible<T, Object>::value);
  28. + std::disjunction<std::is_base_of<U, T>,
  29. + std::conjunction<std::is_same<U, MaybeObject>,
  30. + std::is_convertible<T, Object>>>::value;
  31. };
  32. template <class T1, class T2, class U>
  33. struct is_subtype<UnionT<T1, T2>, U> {