// Test that adding a new unused decl within reduced BMI may not produce a transitive change.
//
// RUN: rm -rf %t
// RUN: split-file %s %t
//
// RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/A.cppm -o %t/A.pcm
// RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/B.cppm -o %t/B.pcm \
// RUN:     -fmodule-file=A=%t/A.pcm
//
// RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/A.v1.cppm -o %t/A.v1.pcm
// RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/B.cppm -o %t/B.v1.pcm \
// RUN:     -fmodule-file=A=%t/A.v1.pcm
//
// RUN: diff %t/B.pcm %t/B.v1.pcm &> /dev/null

//--- A.cppm
export module A;
export int a() { return 44; }

//--- A.v1.cppm
export module A;
int a_impl() { return 48; }
export int a() { return a_impl(); }

//--- B.cppm
export module B;
import A;
export int b() { return a(); }
