if the merged definition is visible, and perform lookups into all merged copies of the definition (not just for special members) so that we can complete the redecl chains for members of the class. llvm-svn: 233420
53 lines
1.5 KiB
C++
53 lines
1.5 KiB
C++
// RUN: rm -rf %t
|
|
// RUN: %clang_cc1 -x objective-c++ -fmodules -fno-modules-error-recovery -fmodules-cache-path=%t -I %S/Inputs %s -verify -std=c++11
|
|
// RUN: %clang_cc1 -x objective-c++ -fmodules -fno-modules-error-recovery -fmodules-cache-path=%t -I %S/Inputs %s -verify -std=c++11 -DIMPORT_DECLS
|
|
|
|
// expected-no-diagnostics
|
|
|
|
#ifdef IMPORT_DECLS
|
|
@import redecl_add_after_load_decls;
|
|
#else
|
|
typedef struct A B;
|
|
extern const int variable;
|
|
extern constexpr int function();
|
|
constexpr int test(bool b) { return b ? variable : function(); }
|
|
|
|
namespace N {
|
|
typedef struct A B;
|
|
extern const int variable;
|
|
extern constexpr int function();
|
|
}
|
|
typedef N::B NB;
|
|
constexpr int N_test(bool b) { return b ? N::variable : N::function(); }
|
|
|
|
@import redecl_add_after_load_top;
|
|
typedef C::A CB;
|
|
constexpr int C_test(bool b) { return b ? C::variable : C::function(); }
|
|
|
|
struct D {
|
|
struct A;
|
|
static const int variable;
|
|
static constexpr int function();
|
|
};
|
|
typedef D::A DB;
|
|
constexpr int D_test(bool b) { return b ? D::variable : D::function(); }
|
|
#endif
|
|
|
|
@import redecl_add_after_load;
|
|
|
|
B tu_struct_test;
|
|
constexpr int tu_variable_test = test(true);
|
|
constexpr int tu_function_test = test(false);
|
|
|
|
NB ns_struct_test;
|
|
constexpr int ns_variable_test = N_test(true);
|
|
constexpr int ns_function_test = N_test(false);
|
|
|
|
CB struct_struct_test;
|
|
constexpr int struct_variable_test = C_test(true);
|
|
constexpr int struct_function_test = C_test(false);
|
|
|
|
DB merged_struct_struct_test;
|
|
constexpr int merged_struct_variable_test = D_test(true);
|
|
constexpr int merged_struct_function_test = D_test(false);
|