// RUN: rm -rf %t // 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 // 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 // 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);