From 711179b5816a65eccad22a7111494d609b899fb2 Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Thu, 4 Mar 2021 06:03:53 -0800 Subject: [PATCH] [OPENMP]Fix PR48759: "fatal error" when compile with preprocessed file. If the file in line directive does not exist on the system we need, to use the original file to get its file id. Differential Revision: https://reviews.llvm.org/D97945 --- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 10 +++++++--- clang/test/OpenMP/target_unknown_file.cpp | 13 +++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 clang/test/OpenMP/target_unknown_file.cpp diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index d087605..f9c79e6 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -1648,9 +1648,13 @@ static void getTargetEntryUniqueInfo(ASTContext &C, SourceLocation Loc, assert(PLoc.isValid() && "Source location is expected to be always valid."); llvm::sys::fs::UniqueID ID; - if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) - SM.getDiagnostics().Report(diag::err_cannot_open_file) - << PLoc.getFilename() << EC.message(); + if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) { + PLoc = SM.getPresumedLoc(Loc, /*UseLineDirectives=*/false); + assert(PLoc.isValid() && "Source location is expected to be always valid."); + if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) + SM.getDiagnostics().Report(diag::err_cannot_open_file) + << PLoc.getFilename() << EC.message(); + } DeviceID = ID.getDevice(); FileID = ID.getFile(); diff --git a/clang/test/OpenMP/target_unknown_file.cpp b/clang/test/OpenMP/target_unknown_file.cpp new file mode 100644 index 0000000..8700c74 --- /dev/null +++ b/clang/test/OpenMP/target_unknown_file.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -verify -fopenmp -triple x86_64-apple-darwin10.6.0 -emit-llvm -o - %s 2>&1 | FileCheck %s +// expected-no-diagnostics + +// CHECK-NOT: fatal error: cannot open file + +// CHECK: call void @__omp_offloading_{{.+}}() +# 1 "unknown.xxxxxxxx" +void a() { +#pragma omp target + ; +} + +// CHECK-NOT: fatal error: cannot open file -- 2.7.4