mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-05-14 09:56:33 +00:00

Close https://github.com/llvm/llvm-project/issues/56916 Within C++20 modules, we may have multiple same constructors in multiple same RecordDecls. And it doesn't make sense naturally to create duplicated deduction guides for the duplicated constructors.
64 lines
1.1 KiB
C++
64 lines
1.1 KiB
C++
// From https://github.com/llvm/llvm-project/issues/61317
|
|
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: split-file %s %t
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm
|
|
// RUN: %clang_cc1 -std=c++20 %t/B.cppm -emit-module-interface -o %t/B.pcm \
|
|
// RUN: -fprebuilt-module-path=%t
|
|
// RUN: %clang_cc1 -std=c++20 %t/Use.cpp -fprebuilt-module-path=%t -fsyntax-only -verify
|
|
|
|
//--- foo.h
|
|
#ifndef _FOO
|
|
#define _FOO
|
|
|
|
template <typename T> struct Foo {
|
|
Foo(T f) {}
|
|
};
|
|
|
|
template <typename T> Foo(T&) -> Foo<T>;
|
|
|
|
struct Bar {
|
|
template <typename T>
|
|
requires requires { Foo{T()}; }
|
|
void baz() const {}
|
|
};
|
|
|
|
template <typename T> struct Foo2 {
|
|
Foo2(T f) {}
|
|
};
|
|
|
|
struct Bar2 {
|
|
template <typename T>
|
|
requires requires { Foo2{T()}; }
|
|
void baz2() const {}
|
|
};
|
|
|
|
#endif
|
|
|
|
//--- A.cppm
|
|
module;
|
|
#include "foo.h"
|
|
export module A;
|
|
export using ::Foo;
|
|
export using ::Bar;
|
|
export using ::Bar2;
|
|
|
|
//--- B.cppm
|
|
module;
|
|
#include "foo.h"
|
|
export module B;
|
|
export import A;
|
|
|
|
//--- Use.cpp
|
|
// expected-no-diagnostics
|
|
import A;
|
|
import B;
|
|
void use() {
|
|
Bar _;
|
|
_.baz<int>();
|
|
|
|
Bar2 __;
|
|
__.baz2<int>();
|
|
}
|