diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-12 02:13:46 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-12 02:13:46 +0000 |
commit | 20fbdb347cf6324e6e8d3f4aa1d0b1ab02f70e8d (patch) | |
tree | fa8a5600d18853b87ac842ab3a2844b315de3534 /clang/test/Modules/merge-template-pattern-visibility-2.cpp | |
parent | 7e98d69847aefb1028aaa7131b508f4b4e9896ae (diff) | |
download | bcm5719-llvm-20fbdb347cf6324e6e8d3f4aa1d0b1ab02f70e8d.tar.gz bcm5719-llvm-20fbdb347cf6324e6e8d3f4aa1d0b1ab02f70e8d.zip |
Fix tracking of merged definitions when the merge target is also merged
into something else.
llvm-svn: 342017
Diffstat (limited to 'clang/test/Modules/merge-template-pattern-visibility-2.cpp')
-rw-r--r-- | clang/test/Modules/merge-template-pattern-visibility-2.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/clang/test/Modules/merge-template-pattern-visibility-2.cpp b/clang/test/Modules/merge-template-pattern-visibility-2.cpp new file mode 100644 index 00000000000..14577f146e9 --- /dev/null +++ b/clang/test/Modules/merge-template-pattern-visibility-2.cpp @@ -0,0 +1,34 @@ +// RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility %s -verify -Werror=undefined-inline + +#pragma clang module build A1 +module A1 { export * } +#pragma clang module contents +#pragma clang module begin A1 +template<typename T> class A {}; +template<typename T> inline bool f(const A<T>&) { return T::error; } +#pragma clang module end +#pragma clang module endbuild + +#pragma clang module build A2 +module A2 { export * } +#pragma clang module contents +#pragma clang module begin A2 +#pragma clang module load A1 +template<typename T> class A {}; +template<typename T> inline bool f(const A<T>&) { return T::error; } +#pragma clang module end +#pragma clang module endbuild + +#pragma clang module build A3 +module A3 { export * } +#pragma clang module contents +#pragma clang module begin A3 +template<typename T> class A {}; +template<typename T> inline bool f(const A<T>&) { return T::error; } +#pragma clang module end +#pragma clang module endbuild + +#pragma clang module load A3 +#pragma clang module import A2 +// expected-error@* {{cannot be used prior to}} +bool y(A<int> o) { return f(o); } // expected-note {{instantiation of}} |