1// RUN: rm -rf %t 2// RUN: %clang_cc1 -x objective-c++ -fmodules -fimplicit-module-maps -fno-modules-error-recovery -fmodules-cache-path=%t -I %S/Inputs %s -verify -std=c++11 3// RUN: %clang_cc1 -x objective-c++ -fmodules -fimplicit-module-maps -fno-modules-error-recovery -fmodules-cache-path=%t -I %S/Inputs %s -verify -std=c++11 -DIMPORT_DECLS 4 5// expected-no-diagnostics 6 7#ifdef IMPORT_DECLS 8@import redecl_add_after_load_decls; 9#else 10typedef struct A B; 11extern const int variable; 12extern constexpr int function(); 13constexpr int test(bool b) { return b ? variable : function(); } 14 15namespace N { 16 typedef struct A B; 17 extern const int variable; 18 extern constexpr int function(); 19} 20typedef N::B NB; 21constexpr int N_test(bool b) { return b ? N::variable : N::function(); } 22 23@import redecl_add_after_load_top; 24typedef C::A CB; 25constexpr int C_test(bool b) { return b ? C::variable : C::function(); } 26 27struct D { 28 struct A; 29 static const int variable; 30 static constexpr int function(); 31}; 32typedef D::A DB; 33constexpr int D_test(bool b) { return b ? D::variable : D::function(); } 34#endif 35 36@import redecl_add_after_load; 37 38B tu_struct_test; 39constexpr int tu_variable_test = test(true); 40constexpr int tu_function_test = test(false); 41 42NB ns_struct_test; 43constexpr int ns_variable_test = N_test(true); 44constexpr int ns_function_test = N_test(false); 45 46CB struct_struct_test; 47constexpr int struct_variable_test = C_test(true); 48constexpr int struct_function_test = C_test(false); 49 50DB merged_struct_struct_test; 51constexpr int merged_struct_variable_test = D_test(true); 52constexpr int merged_struct_function_test = D_test(false); 53