@@ -672,5 +672,45 @@ class OpenACCShutdownConstruct final
672672 SourceLocation End, ArrayRef<const OpenACCClause *> Clauses);
673673};
674674
675+ // This class represents a 'set' construct, which has just a clause list.
676+ class OpenACCSetConstruct final
677+ : public OpenACCConstructStmt,
678+ private llvm::TrailingObjects<OpenACCSetConstruct,
679+ const OpenACCClause *> {
680+ friend TrailingObjects;
681+ OpenACCSetConstruct (unsigned NumClauses)
682+ : OpenACCConstructStmt(OpenACCSetConstructClass,
683+ OpenACCDirectiveKind::Set, SourceLocation{},
684+ SourceLocation{}, SourceLocation{}) {
685+ std::uninitialized_value_construct (
686+ getTrailingObjects<const OpenACCClause *>(),
687+ getTrailingObjects<const OpenACCClause *>() + NumClauses);
688+ setClauseList (MutableArrayRef (getTrailingObjects<const OpenACCClause *>(),
689+ NumClauses));
690+ }
691+
692+ OpenACCSetConstruct (SourceLocation Start, SourceLocation DirectiveLoc,
693+ SourceLocation End,
694+ ArrayRef<const OpenACCClause *> Clauses)
695+ : OpenACCConstructStmt(OpenACCSetConstructClass,
696+ OpenACCDirectiveKind::Set, Start, DirectiveLoc,
697+ End) {
698+ std::uninitialized_copy (Clauses.begin (), Clauses.end (),
699+ getTrailingObjects<const OpenACCClause *>());
700+ setClauseList (MutableArrayRef (getTrailingObjects<const OpenACCClause *>(),
701+ Clauses.size ()));
702+ }
703+
704+ public:
705+ static bool classof (const Stmt *T) {
706+ return T->getStmtClass () == OpenACCSetConstructClass;
707+ }
708+ static OpenACCSetConstruct *CreateEmpty (const ASTContext &C,
709+ unsigned NumClauses);
710+ static OpenACCSetConstruct *Create (const ASTContext &C, SourceLocation Start,
711+ SourceLocation DirectiveLoc,
712+ SourceLocation End,
713+ ArrayRef<const OpenACCClause *> Clauses);
714+ };
675715} // namespace clang
676716#endif // LLVM_CLANG_AST_STMTOPENACC_H
0 commit comments