forked from OSchip/llvm-project
[OpenMP] Handle non-function context before checking for diagnostic
emission Ensure that we are in a function declaration context before checking the diagnostic emission status, to avoid dereferencing a NULL function declaration. Differential Revision: https://reviews.llvm.org/D97573
This commit is contained in:
parent
fc28f600e5
commit
c2de5aff1a
|
@ -18341,6 +18341,8 @@ Decl *Sema::getObjCDeclContext() const {
|
|||
|
||||
Sema::FunctionEmissionStatus Sema::getEmissionStatus(FunctionDecl *FD,
|
||||
bool Final) {
|
||||
assert(FD && "Expected non-null FunctionDecl");
|
||||
|
||||
// SYCL functions can be template, so we check if they have appropriate
|
||||
// attribute prior to checking if it is a template.
|
||||
if (LangOpts.SYCLIsDevice && FD->hasAttr<SYCLKernelAttr>())
|
||||
|
|
|
@ -1939,20 +1939,23 @@ Sema::SemaDiagnosticBuilder Sema::diagIfOpenMPHostCode(SourceLocation Loc,
|
|||
FunctionDecl *FD) {
|
||||
assert(LangOpts.OpenMP && !LangOpts.OpenMPIsDevice &&
|
||||
"Expected OpenMP host compilation.");
|
||||
FunctionEmissionStatus FES = getEmissionStatus(FD);
|
||||
|
||||
SemaDiagnosticBuilder::Kind Kind = SemaDiagnosticBuilder::K_Nop;
|
||||
switch (FES) {
|
||||
case FunctionEmissionStatus::Emitted:
|
||||
Kind = SemaDiagnosticBuilder::K_Immediate;
|
||||
break;
|
||||
case FunctionEmissionStatus::Unknown:
|
||||
Kind = SemaDiagnosticBuilder::K_Deferred;
|
||||
break;
|
||||
case FunctionEmissionStatus::TemplateDiscarded:
|
||||
case FunctionEmissionStatus::OMPDiscarded:
|
||||
case FunctionEmissionStatus::CUDADiscarded:
|
||||
Kind = SemaDiagnosticBuilder::K_Nop;
|
||||
break;
|
||||
if (FD) {
|
||||
FunctionEmissionStatus FES = getEmissionStatus(FD);
|
||||
switch (FES) {
|
||||
case FunctionEmissionStatus::Emitted:
|
||||
Kind = SemaDiagnosticBuilder::K_Immediate;
|
||||
break;
|
||||
case FunctionEmissionStatus::Unknown:
|
||||
Kind = SemaDiagnosticBuilder::K_Deferred;
|
||||
break;
|
||||
case FunctionEmissionStatus::TemplateDiscarded:
|
||||
case FunctionEmissionStatus::OMPDiscarded:
|
||||
case FunctionEmissionStatus::CUDADiscarded:
|
||||
Kind = SemaDiagnosticBuilder::K_Nop;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return SemaDiagnosticBuilder(Kind, Loc, DiagID, FD, *this);
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// RUN: %clang_cc1 -fopenmp-simd -fsycl -fsycl-is-device -triple spir64 -verify -fsyntax-only %s
|
||||
|
||||
// Test that in the presence of SYCL options, that null function
|
||||
// declarations are accounted for when checking to emit diagnostics.
|
||||
|
||||
// expected-no-diagnostics
|
||||
|
||||
__thread void *x;
|
Loading…
Reference in New Issue