//===--- ExprOpenMP.h - Classes for representing expressions ----*- C++ -*-===// // // 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 defines the Expr interface and subclasses. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_AST_EXPROPENMP_H #define LLVM_CLANG_AST_EXPROPENMP_H #include "clang/AST/ComputeDependence.h" #include "clang/AST/Expr.h" namespace clang { /// An explicit cast in C or a C-style cast in C++, which uses the syntax /// ([s1][s2]...[sn])expr. For example: @c ([3][3])f. class OMPArrayShapingExpr final : public Expr, private llvm::TrailingObjects<OMPArrayShapingExpr, Expr *, SourceRange> { … }; /// Helper expressions and declaration for OMPIteratorExpr class for each /// iteration space. struct OMPIteratorHelperData { … }; /// OpenMP 5.0 [2.1.6 Iterators] /// Iterators are identifiers that expand to multiple values in the clause on /// which they appear. /// The syntax of the iterator modifier is as follows: /// \code /// iterator(iterators-definition) /// \endcode /// where iterators-definition is one of the following: /// \code /// iterator-specifier [, iterators-definition ] /// \endcode /// where iterator-specifier is one of the following: /// \code /// [ iterator-type ] identifier = range-specification /// \endcode /// where identifier is a base language identifier. /// iterator-type is a type name. /// range-specification is of the form begin:end[:step], where begin and end are /// expressions for which their types can be converted to iterator-type and step /// is an integral expression. /// In an iterator-specifier, if the iterator-type is not specified then the /// type of that iterator is of int type. /// The iterator-type must be an integral or pointer type. /// The iterator-type must not be const qualified. class OMPIteratorExpr final : public Expr, private llvm::TrailingObjects<OMPIteratorExpr, Decl *, Expr *, SourceLocation, OMPIteratorHelperData> { … }; } // end namespace clang #endif