// UNSUPPORTED: target={{.*}}-zos{{.*}}, target={{.*}}-aix{{.*}}
// RUN: rm -rf %t
// RUN: split-file %s %t
// RUN: %clang_cc1 -emit-llvm -o %t/test.bc -F%t/Frameworks %t/test.m \
// RUN:            -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules.cache
// RUN: %clang_cc1 -emit-llvm -o %t/test.bc -F%t/Frameworks %t/test-functions.m \
// RUN:            -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules.cache

// Test a case when Objective-C interface ivars are present in two different modules.

//--- Frameworks/Foundation.framework/Headers/Foundation.h
@interface NSObject
@end

//--- Frameworks/Foundation.framework/Modules/module.modulemap
framework module Foundation {
  header "Foundation.h"
  export *
}

//--- Frameworks/ObjCInterface.framework/Headers/ObjCInterface.h
#import <Foundation/Foundation.h>
@interface ObjCInterface : NSObject {
@public
  id _item;
}
@end

@interface WithBitFields : NSObject {
@public
  int x: 3;
  int y: 4;
}
@end

//--- Frameworks/ObjCInterface.framework/Modules/module.modulemap
framework module ObjCInterface {
  header "ObjCInterface.h"
  export *
}

//--- Frameworks/ObjCInterfaceCopy.framework/Headers/ObjCInterfaceCopy.h
#import <Foundation/Foundation.h>
@interface ObjCInterface : NSObject {
@public
  id _item;
}
@end

@interface WithBitFields : NSObject {
@public
  int x: 3;
  int y: 4;
}
@end

// Inlined function present only in Copy.framework to make sure it uses decls from Copy module.
__attribute__((always_inline)) void inlinedIVarAccessor(ObjCInterface *obj, WithBitFields *bitFields) {
  obj->_item = 0;
  bitFields->x = 0;
}

//--- Frameworks/ObjCInterfaceCopy.framework/Modules/module.modulemap
framework module ObjCInterfaceCopy {
  header "ObjCInterfaceCopy.h"
  export *
}

//--- test.m
#import <ObjCInterface/ObjCInterface.h>
#import <ObjCInterfaceCopy/ObjCInterfaceCopy.h>

@implementation ObjCInterface
- (void)test:(id)item {
  _item = item;
}
@end

@implementation WithBitFields
- (void)reset {
  x = 0;
  y = 0;
}
@end

//--- test-functions.m
#import <ObjCInterface/ObjCInterface.h>

void testAccessIVar(ObjCInterface *obj, id item) {
  obj->_item = item;
}
void testAccessBitField(WithBitFields *obj) {
  obj->x = 0;
}

#import <ObjCInterfaceCopy/ObjCInterfaceCopy.h>

void testAccessIVarLater(ObjCInterface *obj, id item) {
  obj->_item = item;
}
void testAccessBitFieldLater(WithBitFields *obj) {
  obj->y = 0;
}
void testInlinedFunction(ObjCInterface *obj, WithBitFields *bitFields) {
  inlinedIVarAccessor(obj, bitFields);
}
