// RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // // Treat the behavior of using headers as baseline. // RUN: %clang_cc1 -std=c++20 %t/use-header.cc -isystem %t -fsyntax-only -verify // // RUN: %clang_cc1 -std=c++20 %t/a.cppm -isystem %t -emit-module-interface -o %t/a.pcm // RUN: %clang_cc1 -std=c++20 %t/use-module.cc -isystem %t -fmodule-file=a=%t/a.pcm -fsyntax-only -verify // Test again with reduced BMI. // RUN: %clang_cc1 -std=c++20 %t/a.cppm -isystem %t -emit-reduced-module-interface -o %t/a.pcm // RUN: %clang_cc1 -std=c++20 %t/use-module.cc -isystem %t -fmodule-file=a=%t/a.pcm -fsyntax-only -verify //--- sys.h #ifndef SYS_H #define SYS_H #pragma GCC system_header template struct [[deprecated]] iterator {}; _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wdeprecated\"") _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") template struct reverse_iterator : public iterator {}; _Pragma("GCC diagnostic pop") template class C { public: void i() { reverse_iterator i; } }; #endif //--- use-header.cc // expected-no-diagnostics // However, we see unexpected warnings #include void use() { C().i(); } //--- a.cppm module; #include export module a; export using ::iterator; export using ::C; //--- use-module.cc // expected-no-diagnostics import a; void use() { C().i(); }