diff options
author | Joseph Huber <jhuber6@vols.utk.edu> | 2020-09-30 13:10:32 -0400 |
---|---|---|
committer | Huber, Joseph <huberjn@ornl.gov> | 2020-09-30 13:58:24 -0400 |
commit | 9d2378b59150f6f1cb5c9cf42ea06b0bb57029a1 (patch) | |
tree | e9a82228f43fe6a4264eba9d753eba7ce1161528 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 892df30a7f344b6cb9995710efbc94bb25cfb95b (diff) | |
download | llvm-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.cpp | 8 |
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); } |