File tree Expand file tree Collapse file tree 4 files changed +48
-1
lines changed Expand file tree Collapse file tree 4 files changed +48
-1
lines changed Original file line number Diff line number Diff line change @@ -687,6 +687,9 @@ class alignas(8) Decl {
687
687
// / Whether this declaration comes from a named module.
688
688
bool isInNamedModule () const ;
689
689
690
+ // / Whether this declaration comes from a header unit.
691
+ bool isFromHeaderUnit () const ;
692
+
690
693
// / Return true if this declaration has an attribute which acts as
691
694
// / definition of the entity, such as 'alias' or 'ifunc'.
692
695
bool hasDefiningAttr () const ;
Original file line number Diff line number Diff line change @@ -2527,7 +2527,7 @@ class BitsUnpacker {
2527
2527
2528
2528
inline bool shouldSkipCheckingODR (const Decl *D) {
2529
2529
return D->getASTContext ().getLangOpts ().SkipODRCheckInGMF &&
2530
- D->isFromGlobalModule ();
2530
+ ( D->isFromGlobalModule () || D-> isFromHeaderUnit () );
2531
2531
}
2532
2532
2533
2533
} // namespace clang
Original file line number Diff line number Diff line change @@ -1168,6 +1168,10 @@ bool Decl::isInNamedModule() const {
1168
1168
return getOwningModule () && getOwningModule ()->isNamedModule ();
1169
1169
}
1170
1170
1171
+ bool Decl::isFromHeaderUnit () const {
1172
+ return getOwningModule () && getOwningModule ()->isHeaderUnit ();
1173
+ }
1174
+
1171
1175
static Decl::Kind getKind (const Decl *D) { return D->getKind (); }
1172
1176
static Decl::Kind getKind (const DeclContext *DC) { return DC->getDeclKind (); }
1173
1177
Original file line number Diff line number Diff line change
1
+ // RUN: rm -fR %t
2
+ // RUN: split-file %s %t
3
+ // RUN: cd %t
4
+ // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header bz1.h
5
+ // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header bz2.h
6
+ // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header -fmodule-file=bz1.pcm -fmodule-file=bz2.pcm bz.cpp
7
+
8
+ // --- compare
9
+ namespace std {
10
+ namespace __detail {
11
+
12
+ template <typename _Tp>
13
+ inline constexpr unsigned __cmp_cat_id = 1 ;
14
+
15
+ template <typename ... _Ts>
16
+ constexpr auto __common_cmp_cat () {
17
+ (__cmp_cat_id<_Ts> | ...);
18
+ }
19
+
20
+ } // namespace __detail
21
+ } // namespace std
22
+
23
+ // --- bz0.h
24
+ template <class T >
25
+ int operator |(T, T);
26
+
27
+ // --- bz1.h
28
+ #include " bz0.h"
29
+ #include < compare>
30
+ // expected-no-diagnostics
31
+
32
+ // --- bz2.h
33
+ #include < compare>
34
+ // expected-no-diagnostics
35
+
36
+ // --- bz.cpp
37
+ #include < compare>
38
+
39
+ import " bz1.h" ; // expected-warning {{the implementation of header units is in an experimental phase}}
40
+ import " bz2.h" ; // expected-warning {{the implementation of header units is in an experimental phase}}
You can’t perform that action at this time.
0 commit comments