14eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose#ifdef AS_SYSTEM
24eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose#pragma clang system_header
34eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose
44eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rosenamespace system {
54eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose  class A {
64eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose  public:
74eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose    A() {
84eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose      foo(); // no-warning
94eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose    }
104eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose
114eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose    virtual int foo();
124eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose  };
134eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose}
144eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose
154eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose#else
164eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose
174eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rosenamespace header {
184eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose  class A {
194eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose  public:
204eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose    A() {
214eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose      foo(); // expected-warning{{Call virtual functions during construction or destruction will never go to a more derived class}}
224eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose    }
234eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose
244eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose    virtual int foo();
254eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose  };
264eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose}
274eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose
284eff6b5d6a5cbb6bd669854a84365aa61d70819eJordan Rose#endif
29