llvm-project/clang/lib/AST/DeclOpenACC.cpp
erichkeane 79079c9469 [OpenACC] Finish implementing 'routine' AST/Sema.
This is the last item of the OpenACC 3.3 spec. It includes the
implicit-name version of 'routine', plus significant refactorings to
make the two work together.  The implicit name version is represented as
an attribute on the function call. This patch also implements the
clauses for the implicit-name version, as well as the A.3.4 warning.
2025-03-21 08:57:54 -07:00

64 lines
2.5 KiB
C++

//===--- DeclOpenACC.cpp - Classes for OpenACC 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 file implements the subclasses of Decl class declared in Decl.h
//
//===----------------------------------------------------------------------===//
#include "clang/AST/DeclOpenACC.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/OpenACCClause.h"
using namespace clang;
OpenACCDeclareDecl *
OpenACCDeclareDecl::Create(ASTContext &Ctx, DeclContext *DC,
SourceLocation StartLoc, SourceLocation DirLoc,
SourceLocation EndLoc,
ArrayRef<const OpenACCClause *> Clauses) {
return new (Ctx, DC,
additionalSizeToAlloc<const OpenACCClause *>(Clauses.size()))
OpenACCDeclareDecl(DC, StartLoc, DirLoc, EndLoc, Clauses);
}
OpenACCDeclareDecl *
OpenACCDeclareDecl::CreateDeserialized(ASTContext &Ctx, GlobalDeclID ID,
unsigned NumClauses) {
return new (Ctx, ID, additionalSizeToAlloc<const OpenACCClause *>(NumClauses))
OpenACCDeclareDecl(NumClauses);
}
OpenACCRoutineDecl *
OpenACCRoutineDecl::Create(ASTContext &Ctx, DeclContext *DC,
SourceLocation StartLoc, SourceLocation DirLoc,
SourceLocation LParenLoc, Expr *FuncRef,
SourceLocation RParenLoc, SourceLocation EndLoc,
ArrayRef<const OpenACCClause *> Clauses) {
return new (Ctx, DC,
additionalSizeToAlloc<const OpenACCClause *>(Clauses.size()))
OpenACCRoutineDecl(DC, StartLoc, DirLoc, LParenLoc, FuncRef, RParenLoc,
EndLoc, Clauses);
}
OpenACCRoutineDecl *
OpenACCRoutineDecl::CreateDeserialized(ASTContext &Ctx, GlobalDeclID ID,
unsigned NumClauses) {
return new (Ctx, ID, additionalSizeToAlloc<const OpenACCClause *>(NumClauses))
OpenACCRoutineDecl(NumClauses);
}
void OpenACCRoutineDeclAttr::printPrettyPragma(
llvm::raw_ostream &OS, const clang::PrintingPolicy &P) const {
if (Clauses.size() > 0) {
OS << ' ';
OpenACCClausePrinter Printer{OS, P};
Printer.VisitClauseList(Clauses);
}
}