[PATCH] D121590: [C++20][Modules][Driver][HU 3/N] Handle foo.h with -fmodule-header and/or C++ invocation.
Iain Sandoe via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 21 01:40:39 PDT 2022
iains updated this revision to Diff 416855.
iains added a comment.
rebased.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D121590/new/
https://reviews.llvm.org/D121590
Files:
clang/lib/Driver/Driver.cpp
clang/test/Driver/cxx20-header-units-02.cpp
Index: clang/test/Driver/cxx20-header-units-02.cpp
===================================================================
--- clang/test/Driver/cxx20-header-units-02.cpp
+++ clang/test/Driver/cxx20-header-units-02.cpp
@@ -3,6 +3,9 @@
// RUN: %clang++ -### -std=c++20 -fmodule-header=user foo.hh 2>&1 | \
// RUN: FileCheck -check-prefix=CHECK-USER %s
+// RUN: %clang++ -### -std=c++20 -fmodule-header=user foo.h 2>&1 | \
+// RUN: FileCheck -check-prefix=CHECK-USER1 %s
+
// RUN: %clang++ -### -std=c++20 -fmodule-header=system foo.hh 2>&1 | \
// RUN: FileCheck -check-prefix=CHECK-SYS1 %s
@@ -19,6 +22,10 @@
// CHECK-USER-SAME: "-o" "foo.pcm"
// CHECK-USER-SAME: "-x" "c++-user-header" "foo.hh"
+// CHECK-USER1: "-emit-header-unit"
+// CHECK-USER1-SAME: "-o" "foo.pcm"
+// CHECK-USER1-SAME: "-x" "c++-user-header" "foo.h"
+
// CHECK-SYS1: "-emit-header-unit"
// CHECK-SYS1-SAME: "-o" "foo.pcm"
// CHECK-SYS1-SAME: "-x" "c++-system-header" "foo.hh"
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -2423,7 +2423,9 @@
types::ID OldTy = Ty;
Ty = types::lookupCXXTypeForCType(Ty);
- if (Ty != OldTy)
+ // Do not complain about foo.h, when we are known to be processing
+ // it as a C++20 header unit.
+ if (Ty != OldTy && !(OldTy == types::TY_CHeader && hasHeaderMode()))
Diag(clang::diag::warn_drv_treating_input_as_cxx)
<< getTypeName(OldTy) << getTypeName(Ty);
}
@@ -2448,8 +2450,11 @@
}
// Disambiguate headers that are meant to be header units from those
- // intended to be PCH.
- if (Ty == types::TY_CXXHeader && hasHeaderMode())
+ // intended to be PCH. Avoid missing '.h' cases that are counted as
+ // C headers by default - we know we are in C++ mode and we do not
+ // want to issue a complaint about compiling things in the wrong mode.
+ if ((Ty == types::TY_CXXHeader || Ty == types::TY_CHeader) &&
+ hasHeaderMode())
Ty = CXXHeaderUnitType(CXX20HeaderType);
} else {
assert(InputTypeArg && "InputType set w/o InputTypeArg");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121590.416855.patch
Type: text/x-patch
Size: 2295 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220321/9a894fc4/attachment.bin>
More information about the cfe-commits
mailing list