// RUN: rm -rf %t // RUN: mkdir %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/interface.cppm -emit-module-interface \ // RUN: -o %t/m.pcm // RUN: %clang_cc1 -std=c++20 %t/implementation.cpp -fmodule-file=m=%t/m.pcm \ // RUN: -fsyntax-only -verify //--- invisible.h #pragma once // This breaks things. const int kInvisibleSymbol = 0; struct invisible_struct {}; #define INVISIBLE_DEFINE //--- visible.h #include "invisible.h" const int kSadlyUndeclaredSymbol = kInvisibleSymbol; using unfortunately_still_invisible_struct = invisible_struct; #ifndef INVISIBLE_DEFINE # error "Still not defined." #endif //--- interface.cppm module; #include "visible.h" export module m; //--- implementation.cpp // expected-no-diagnostics module; #include "visible.h" module m;