aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Basic/FileManager.cpp2
-rw-r--r--clang/lib/Lex/PPDirectives.cpp6
2 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index ec84aad..86fe352 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -330,6 +330,8 @@ llvm::Expected<FileEntryRef> FileManager::getFileRef(StringRef Filename,
UFE->UID = NextFileUID++;
UFE->UniqueID = Status.getUniqueID();
UFE->IsNamedPipe = Status.getType() == llvm::sys::fs::file_type::fifo_file;
+ UFE->IsDeviceFile =
+ Status.getType() == llvm::sys::fs::file_type::character_file;
UFE->File = std::move(F);
if (UFE->File) {
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp
index dfdba6b..8411526 100644
--- a/clang/lib/Lex/PPDirectives.cpp
+++ b/clang/lib/Lex/PPDirectives.cpp
@@ -4012,6 +4012,12 @@ void Preprocessor::HandleEmbedDirective(SourceLocation HashLoc, Token &EmbedTok,
Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;
return;
}
+
+ if (MaybeFileRef->isDeviceFile()) {
+ Diag(FilenameTok, diag::err_pp_embed_device_file) << Filename;
+ return;
+ }
+
std::optional<llvm::MemoryBufferRef> MaybeFile =
getSourceManager().getMemoryBufferForFileOrNone(*MaybeFileRef);
if (!MaybeFile) {