-
Notifications
You must be signed in to change notification settings - Fork 745
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[OpenMP][SYCL] Improve diagnosing of unsupported types usage
Summary: Diagnostic is emitted if some declaration of unsupported type declaration is used inside device code. Memcpy operations for structs containing member with unsupported type are allowed. Fixed crash on attempt to emit diagnostic outside of the functions. The approach is generalized between SYCL and OpenMP. CUDA/OMP deferred diagnostic interface is going to be used for SYCL device. Reviewers: rsmith, rjmccall, ABataev, erichkeane, bader, jdoerfert, aaron.ballman Reviewed By: jdoerfert Subscribers: guansong, sstefan1, yaxunl, mgorny, bader, ebevhan, Anastasia, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D74387
- Loading branch information
Showing
15 changed files
with
347 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
//===- SemaSYCL.cpp - Semantic Analysis for SYCL constructs ---------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// This implements Semantic Analysis for SYCL constructs. | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "clang/Sema/Sema.h" | ||
#include "clang/Sema/SemaDiagnostic.h" | ||
|
||
using namespace clang; | ||
|
||
// ----------------------------------------------------------------------------- | ||
// SYCL device specific diagnostics implementation | ||
// ----------------------------------------------------------------------------- | ||
|
||
Sema::DeviceDiagBuilder Sema::SYCLDiagIfDeviceCode(SourceLocation Loc, | ||
unsigned DiagID) { | ||
assert(getLangOpts().SYCLIsDevice && | ||
"Should only be called during SYCL compilation"); | ||
FunctionDecl *FD = dyn_cast<FunctionDecl>(getCurLexicalContext()); | ||
DeviceDiagBuilder::Kind DiagKind = [this, FD] { | ||
if (!FD) | ||
return DeviceDiagBuilder::K_Nop; | ||
if (getEmissionStatus(FD) == Sema::FunctionEmissionStatus::Emitted) | ||
return DeviceDiagBuilder::K_ImmediateWithCallStack; | ||
return DeviceDiagBuilder::K_Deferred; | ||
}(); | ||
return DeviceDiagBuilder(DiagKind, Loc, DiagID, FD, *this); | ||
} | ||
|
||
bool Sema::checkSYCLDeviceFunction(SourceLocation Loc, FunctionDecl *Callee) { | ||
assert(getLangOpts().SYCLIsDevice && | ||
"Should only be called during SYCL compilation"); | ||
assert(Callee && "Callee may not be null."); | ||
|
||
// Errors in unevaluated context don't need to be generated, | ||
// so we can safely skip them. | ||
if (isUnevaluatedContext() || isConstantEvaluated()) | ||
return true; | ||
|
||
DeviceDiagBuilder::Kind DiagKind = DeviceDiagBuilder::K_Nop; | ||
|
||
return DiagKind != DeviceDiagBuilder::K_Immediate && | ||
DiagKind != DeviceDiagBuilder::K_ImmediateWithCallStack; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.