|  | // RUN: rm -rf %t | 
|  | // RUN: split-file %s %t | 
|  | // RUN: cd %t | 
|  |  | 
|  | // RUN: %clang_cc1 -x c++ -std=c++20 -emit-module-interface a.h -o a.pcm -fms-extensions -verify | 
|  | // RUN: %clang_cc1 -std=c++20 a.cpp -fmodule-file=A=a.pcm -fms-extensions -fsyntax-only -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -x c++ -std=c++20 -emit-reduced-module-interface a.h -o a.pcm -fms-extensions -verify | 
|  | // RUN: %clang_cc1 -std=c++20 a.cpp -fmodule-file=A=a.pcm -fms-extensions -fsyntax-only -verify | 
|  |  | 
|  | //--- a.h | 
|  |  | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | export module A; | 
|  |  | 
|  | export template <typename T> | 
|  | void f() { | 
|  | char a[] = __func__; | 
|  | } | 
|  |  | 
|  | //--- a.cpp | 
|  |  | 
|  | // expected-warning@a.h:8 {{initializing an array from a '__func__' predefined identifier is a Microsoft extension}} | 
|  |  | 
|  | import A; | 
|  |  | 
|  | void g() { | 
|  | f<int>(); // expected-note {{in instantiation of function template specialization 'f<int>' requested here}} | 
|  | } |