| // RUN: rm -rf %t |
| // RUN: mkdir -p %t |
| // RUN: split-file %s %t |
| // |
| // Test that duplicate inline function definitions in different partitions |
| // of the same named module are diagnosed as ODR violations. |
| // See https://github.com/llvm/llvm-project/issues/186603 |
| // |
| // Case 1: Module interface imports partition and redefines inline function |
| // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/partition1.cppm -o %t/A-P1.pcm |
| // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/module1.cppm \ |
| // RUN: -fmodule-file=A:P1=%t/A-P1.pcm -o %t/A.pcm -verify |
| |
| //--- partition1.cppm |
| export module A:P1; |
| export inline void x() {} |
| |
| //--- module1.cppm |
| export module A; |
| import :P1; |
| export inline void x() {} // expected-error {{redefinition of 'x'}} |
| // expected-note@partition1.cppm:* {{previous definition is here}} |