https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90273

--- Comment #4 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
The code is:
  inline bool IsNodeInternal() const { return false; }

  template <typename First, typename... Args>
  inline bool IsNodeInternal(First aFirst, Args... aArgs) const {
    return mNodeInfo->Equals(aFirst) || IsNodeInternal(aArgs...);
  }

 public:
  inline bool IsHTMLElement() const {
    return IsElement() && IsInNamespace(3);
  }

  inline bool IsHTMLElement(const nsAtom* aTag) const {
    return IsElement() && mNodeInfo->Equals(aTag, 3);
  }

  template <typename First, typename... Args>
  inline bool IsAnyOfHTMLElements(First aFirst, Args... aArgs) const {
    return IsHTMLElement() && IsNodeInternal(aFirst, aArgs...);
  }

$ grep ";; Function nsINode::IsNodeInternal" *cfg2 | less
;; Function nsINode::IsNodeInternal (_ZNK7nsINode14IsNodeInternalEv,
funcdef_no=13668, decl_uid=274623, cgraph_uid=7143, symbol_order=7869)
;; Function nsINode::IsNodeInternal<nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJEEEbT_DpT0_, funcdef_no=58886,
decl_uid=1359969, cgraph_uid=49491, symbol_order=50680)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_EEEbT_DpT0_, funcdef_no=58870,
decl_uid=1359893, cgraph_uid=49475, symbol_order=50664)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*> (_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_S2_EEEbT_DpT0_,
funcdef_no=58853, decl_uid=1359814, cgraph_uid=49458, symbol_order=50647)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_S2_S2_EEEbT_DpT0_,
funcdef_no=58835, decl_uid=1359727, cgraph_uid=49440, symbol_order=50629)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*, nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_S2_S2_S2_EEEbT_DpT0_,
funcdef_no=58816, decl_uid=1359637, cgraph_uid=49421, symbol_order=50610)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_S2_S2_S2_S2_EEEbT_DpT0_,
funcdef_no=58796, decl_uid=1359532, cgraph_uid=49401, symbol_order=50590)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_S2_S2_S2_S2_S2_EEEbT_DpT0_,
funcdef_no=58774, decl_uid=1359424, cgraph_uid=49379, symbol_order=50568)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_S2_S2_S2_S2_S2_S2_EEEbT_DpT0_,
funcdef_no=58751, decl_uid=1359292, cgraph_uid=49356, symbol_order=50545)
;; Function nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*>
(_ZNK7nsINode14IsNodeInternalIP12nsStaticAtomJS2_S2_S2_S2_S2_S2_S2_S2_EEEbT_DpT0_,
funcdef_no=58719, decl_uid=1359003, cgraph_uid=49324, symbol_order=50513)

GCC ends up producing empty BBS with 1753608 debug statements in
nsINode::IsNodeInternal<nsStaticAtom*, nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*, nsStaticAtom*,
nsStaticAtom*> (const struct nsINode * const this, struct nsStaticAtom *
aFirst, struct nsStaticAtom * aArgs#0, struct nsStaticAtom * aArgs#1, struct
nsStaticAtom * aArgs#2, struct nsStaticAtom * aArgs#3, struct nsStaticAtom *
aArgs#4, struct nsStaticAtom * aArgs#5, struct nsStaticAtom * aArgs#6, struct
nsStaticAtom * aArgs#7

I did not wait for the version with 9 parameters :)

Reply via email to