| // Tests referencing variable with initializer containing side effect across module boundary |
| // |
| // RUN: rm -rf %t |
| // RUN: mkdir -p %t |
| // RUN: split-file %s %t |
| |
| // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/Foo.cppm \ |
| // RUN: -o %t/Foo.pcm |
| |
| // RUN: %clang_cc1 -std=c++20 -emit-module-interface \ |
| // RUN: -fmodule-file=Foo=%t/Foo.pcm \ |
| // RUN: %t/Bar.cppm \ |
| // RUN: -o %t/Bar.pcm |
| |
| // RUN: %clang_cc1 -std=c++20 -emit-obj \ |
| // RUN: -main-file-name Bar.cppm \ |
| // RUN: -fmodule-file=Foo=%t/Foo.pcm \ |
| // RUN: -x pcm %t/Bar.pcm \ |
| // RUN: -o %t/Bar.o |
| |
| //--- Foo.cppm |
| export module Foo; |
| |
| export { |
| class S {}; |
| |
| inline S s = S{}; |
| } |
| |
| //--- Bar.cppm |
| export module Bar; |
| import Foo; |
| |
| S bar() { |
| return s; |
| } |
| |