blob: d59099f5de11d607a0f405a165f17b73009f9705 [file] [log] [blame]
Douglas Gregor70331272011-12-09 02:04:43 +00001// other file: expected-note{{'no_umbrella_A_private' declared here}}
Douglas Gregor97eec242011-09-15 22:00:41 +00002
3// RUN: rm -rf %t
Douglas Gregor158764b2011-12-06 20:51:42 +00004// RUN: %clang_cc1 -Wauto-import -fmodule-cache-path %t -fauto-module-import -F %S/Inputs %s -verify
Douglas Gregor97eec242011-09-15 22:00:41 +00005
Douglas Gregor41e115a2011-11-30 18:02:36 +00006#include <DependsOnModule/DependsOnModule.h> // expected-warning{{treating #include as an import of module 'DependsOnModule'}}
Douglas Gregor97eec242011-09-15 22:00:41 +00007
8#ifdef MODULE_H_MACRO
9# error MODULE_H_MACRO should have been hidden
10#endif
11
12#ifdef DEPENDS_ON_MODULE
13# error DEPENDS_ON_MODULE should have been hidden
14#endif
Douglas Gregorcf68c582011-12-01 22:20:10 +000015
Douglas Gregord8bd7532011-12-05 17:40:25 +000016Module *mod; // expected-error{{unknown type name 'Module'}}
17
18#import <AlsoDependsOnModule/AlsoDependsOnModule.h> // expected-warning{{treating #import as an import of module 'AlsoDependsOnModule'}}
19Module *mod2;
20
Douglas Gregore5626c42011-12-06 17:15:11 +000021int getDependsOther() { return depends_on_module_other; }
Douglas Gregor356f3d42011-12-06 17:31:28 +000022
23void testSubframeworkOther() {
24 double *sfo1 = sub_framework_other; // expected-error{{use of undeclared identifier 'sub_framework_other'}}
25}
26
Douglas Gregor70331272011-12-09 02:04:43 +000027// Test umbrella-less submodule includes
28#include <NoUmbrella/A.h> // expected-warning{{treating #include as an import of module 'NoUmbrella.A'}}
29int getNoUmbrellaA() { return no_umbrella_A; }
30
Douglas Gregor356f3d42011-12-06 17:31:28 +000031// Test header cross-subframework include pattern.
Douglas Gregordd005f62011-12-06 17:34:58 +000032#include <DependsOnModule/../Frameworks/SubFramework.framework/Headers/Other.h> // expected-warning{{treating #include as an import of module 'DependsOnModule.SubFramework.Other'}}
Douglas Gregor356f3d42011-12-06 17:31:28 +000033
34void testSubframeworkOtherAgain() {
35 double *sfo1 = sub_framework_other;
36}
Douglas Gregore89dbc12011-12-06 19:39:29 +000037
38void testModuleSubFramework() {
39 char *msf = module_subframework;
40}
41
42#include <Module/../Frameworks/SubFramework.framework/Headers/SubFramework.h> // expected-warning{{treating #include as an import of module 'Module.SubFramework'}}
43
44void testModuleSubFrameworkAgain() {
45 char *msf = module_subframework;
46}
Douglas Gregore7ab3662011-12-07 02:23:45 +000047
48// Test inclusion of private headers.
49#include <DependsOnModule/DependsOnModulePrivate.h> // expected-warning{{treating #include as an import of module 'DependsOnModule.Private.DependsOnModule'}}
Douglas Gregor80306772011-12-07 21:25:07 +000050
51int getDependsOnModulePrivate() { return depends_on_module_private; }
Douglas Gregor9458f822011-12-07 22:05:21 +000052
53#include <Module/ModulePrivate.h> // expected-warning{{treating #include as an import of module 'Module.Private.ModulePrivate'}}
54
55int getModulePrivate() { return module_private; }
Douglas Gregor70331272011-12-09 02:04:43 +000056
57#include <NoUmbrella/A_Private.h> // expected-warning{{treating #include as an import of module 'NoUmbrella.Private.A_Private'}}
58int getNoUmbrellaAPrivate() { return no_umbrella_A_private; }
59
60int getNoUmbrellaBPrivateFail() { return no_umbrella_B_private; } // expected-error{{use of undeclared identifier 'no_umbrella_B_private'; did you mean 'no_umbrella_A_private'?}}