https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66027
--- Comment #7 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- trippels@gcc75 ~ % cat ASTContext_preproc.cpp namespace std { template <class _T1, class _T2> struct pair { _T1 first; _T2 second; }; template <class _T1, class _T2> pair<_T1, _T2> make_pair(_T1, _T2); } namespace llvm { class StringRef; } using llvm::StringRef; namespace llvm { class StringRef { char *Data; unsigned long Length; public: StringRef(int); }; } class A { public: void m_fn1(StringRef Name) { std::make_pair(Name, nullptr); } }; class B { A &Idents; int m_fn2() const; }; int B::m_fn2() const { Idents.m_fn1(0); } trippels@gcc75 ~ % cat CIndex_preproc.cpp namespace std { template <class _T1, class _T2> struct pair { _T1 first; _T2 second; }; template <class _T1, class _T2> pair<_T1, _T2> make_pair(_T1, _T2); } namespace llvm { class StringRef { char *Data; unsigned long Length; }; } void annotatePreprocessorTokens() { llvm::StringRef Name; std::make_pair(Name, nullptr); } trippels@gcc75 ~ % ~/gcc_5/usr/local/bin/g++ -fPIC -flto -std=c++14 -O2 -c ASTContext_preproc.cpp trippels@gcc75 ~ % ~/gcc_5/usr/local/bin/g++ -fPIC -flto -std=c++14 -shared -o /dev/null CIndex_preproc.cpp ASTContext_preproc.o <nullptr_type 0x7f2accfb9b28 decltype(nullptr) unsigned DI size <integer_cst 0x7f2accdc4bb8 type <integer_type 0x7f2accdc8150 bitsizetype> constant 64> unit size <integer_cst 0x7f2accdc4bd0 type <integer_type 0x7f2accdc80a8 sizetype> constant 8> align 8 symtab 0 alias set 0 canonical type 0x7f2accfb9b28> lto1: internal compiler error: in odr_types_equivalent_p, at ipa-devirt.c:1543 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. lto-wrapper: fatal error: /home/trippels/gcc_5/usr/local/bin/g++ returned 1 exit status compilation terminated. /home/trippels/bin/ld: fatal error: lto-wrapper failed collect2: error: ld returned 1 exit status