aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorJoseph Huber <jhuber6@vols.utk.edu>2020-09-30 13:10:32 -0400
committerHuber, Joseph <huberjn@ornl.gov>2020-09-30 13:58:24 -0400
commit9d2378b59150f6f1cb5c9cf42ea06b0bb57029a1 (patch)
treee9a82228f43fe6a4264eba9d753eba7ce1161528 /clang/lib/Frontend/CompilerInvocation.cpp
parent892df30a7f344b6cb9995710efbc94bb25cfb95b (diff)
downloadllvm-9d2378b59150f6f1cb5c9cf42ea06b0bb57029a1.zip
llvm-9d2378b59150f6f1cb5c9cf42ea06b0bb57029a1.tar.gz
llvm-9d2378b59150f6f1cb5c9cf42ea06b0bb57029a1.tar.bz2
[OpenMP] Add Error Handling for Conflicting Pointer Sizes for Target Offload
Summary: This patch adds an error to Clang that detects if OpenMP offloading is used between two architectures with incompatible pointer sizes. This ensures that the data mapping can be done correctly and solves an issue in code generation generating the wrong size pointer. Reviewer: jdoerfert Subscribers: Tags: #OpenMP #Clang Differential Revision:
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index b402f53..bbdf0e3 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -3206,6 +3206,14 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
TT.getArch() == llvm::Triple::x86 ||
TT.getArch() == llvm::Triple::x86_64))
Diags.Report(diag::err_drv_invalid_omp_target) << A->getValue(i);
+ else if ((T.isArch64Bit() && TT.isArch32Bit()) ||
+ (T.isArch64Bit() && TT.isArch16Bit()) ||
+ (T.isArch32Bit() && TT.isArch64Bit()) ||
+ (T.isArch32Bit() && TT.isArch16Bit()) ||
+ (T.isArch16Bit() && TT.isArch32Bit()) ||
+ (T.isArch16Bit() && TT.isArch64Bit()))
+ Diags.Report(diag::err_drv_incompatible_omp_arch)
+ << A->getValue(i) << T.str();
else
Opts.OMPTargetTriples.push_back(TT);
}