// RUN: %clang_cc1 %s -ast-print -o - -chain-include %s -chain-include %s // RUN: %clang_cc1 %s -ast-print -o - -fmodules -chain-include %s -chain-include %s #if !defined(PASS1) #define PASS1 template class TClass; namespace NS { template TClass problematic(X * ptr, const TClass &src); template class TBaseClass { protected: template friend TClass problematic(X * ptr, const TClass &src); }; } template class TClass: public NS::TBaseClass { public: inline TClass() { } }; namespace NS { template TClass problematic(X *ptr, const TClass &src); } template TClass unconst(const TClass &src); #elif !defined(PASS2) #define PASS2 namespace std { class s {}; } typedef TClass TStr; struct crash { TStr str; crash(const TClass p) { unconst(p); } }; #else void f() { const TStr p; crash c(p); } #endif