1*67e74705SXin Li // RUN: rm -rf %t 2*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -I%S/Inputs/PR27401 -verify %s 3*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -fmodules -fmodule-map-file=%S/Inputs/PR27401/module.modulemap -fmodules-cache-path=%t -I%S/Inputs/PR27401 -verify %s 4*67e74705SXin Li 5*67e74705SXin Li #include "a.h" 6*67e74705SXin Li #define _LIBCPP_VECTOR 7*67e74705SXin Li template <class, class _Allocator> 8*67e74705SXin Li class __vector_base { 9*67e74705SXin Li protected: 10*67e74705SXin Li _Allocator __alloc() const; 11*67e74705SXin Li __vector_base(_Allocator); 12*67e74705SXin Li }; 13*67e74705SXin Li 14*67e74705SXin Li template <class _Tp, class _Allocator = allocator> 15*67e74705SXin Li class vector : __vector_base<_Tp, _Allocator> { 16*67e74705SXin Li public: 17*67e74705SXin Li vector() noexcept(is_nothrow_default_constructible<_Allocator>::value); 18*67e74705SXin Li vector(const vector &); 19*67e74705SXin Li vector(vector &&) 20*67e74705SXin Li noexcept(is_nothrow_move_constructible<_Allocator>::value); 21*67e74705SXin Li }; 22*67e74705SXin Li 23*67e74705SXin Li template <class _Tp, class _Allocator> vector(const vector & __x)24*67e74705SXin Livector<_Tp, _Allocator>::vector(const vector &__x) : __vector_base<_Tp, _Allocator>(__x.__alloc()) {} 25*67e74705SXin Li 26*67e74705SXin Li struct CommentOptions { 27*67e74705SXin Li vector<char> ParseAllComments; CommentOptionsCommentOptions28*67e74705SXin Li CommentOptions() {} 29*67e74705SXin Li }; 30*67e74705SXin Li struct PrintingPolicy { PrintingPolicyPrintingPolicy31*67e74705SXin Li PrintingPolicy(CommentOptions LO) : LangOpts(LO) {} 32*67e74705SXin Li CommentOptions LangOpts; 33*67e74705SXin Li }; 34*67e74705SXin Li 35*67e74705SXin Li #include "b.h" fn1()36*67e74705SXin LiCommentOptions fn1() { return fn1(); } 37*67e74705SXin Li 38*67e74705SXin Li // expected-no-diagnostics 39