================
Comment at: include/clang/AST/StmtOpenMP.h:80
@@ +79,3 @@
+  /// \brief Fetches list of variables associated with this clause.
+  llvm::MutableArrayRef<Expr *> getVars() {
+    return llvm::MutableArrayRef<Expr *>(
----------------
Doug Gregor wrote:
> getVars() is slightly misleading. getVarRefs(), perhaps?
Ok

================
Comment at: include/clang/AST/StmtOpenMP.h:169
@@ +168,3 @@
+  ///
+  explicit OMPDefaultClause()
+    : OMPClause(OMPC_default, SourceLocation(), SourceLocation()),
----------------
Doug Gregor wrote:
> This doesn't need to be 'explicit'.
Ok

================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:6418
@@ -6407,1 +6417,3 @@
+def err_omp_clause_ref_type_arg : Error<
+  "arguments of OpenMP clause '%0' cannot be of reference type">;
 def err_omp_threadprivate_incomplete_type : Error<
----------------
Doug Gregor wrote:
> How about adding the actual type (via %1) at the end of this? It can be 
> important when dealing with template instantiations.
Ok

================
Comment at: lib/Sema/SemaOpenMP.cpp:202
@@ +201,3 @@
+namespace {
+class StructuredStmtChecker : public StmtVisitor<StructuredStmtChecker, bool> {
+public:
----------------
Doug Gregor wrote:
> I gather that this is trying to check whether the given statement is a 
> structured block, but it's not clear exactly what rules are being followed. 
> (The OpenMP Specification is ridiculously vague in its definition). Note that 
> the checking for "goto" rules are elsewhere (as they should be), and we 
> aren't trying to check the rules for "throw" (which we can't figure out 
> statically anyway), or "setjmp" (which could be here).
Doug, it tries to exclude stand-alone goto, break, continue, throw, return 
statements. All other statements are allowed.

================
Comment at: lib/Sema/SemaOpenMP.cpp:210
@@ +209,3 @@
+    //return false;
+    return true;
+  }
----------------
Doug Gregor wrote:
> Why is this always returning true?
I'll fix it

================
Comment at: lib/Sema/SemaOpenMP.cpp:255
@@ +254,3 @@
+    if (!Checker.Visit(AStmt)) {
+      Diag(StartLoc, diag::err_omp_directive_nonblock)
+        << getOpenMPDirectiveName(Kind) << AStmt;
----------------
Doug Gregor wrote:
> This isn't a very helpful diagnostic, because it doesn't show which part of 
> the statement makes it not a structured block. Also, there don't seem to be 
> any tests for this diagnostic.
> 
> I suggest removing the structured-block checking from this patch, because 
> it's not nearly as baked as the rest of the patch and I don't want it holding 
> up the rest.
Ok, I'll remove it for now.

================
Comment at: lib/Sema/SemaOpenMP.cpp:380
@@ +379,3 @@
+    //  structure element) cannot appear in a private clause.
+    DeclRefExpr *DE = dyn_cast_or_null<DeclRefExpr>(*I);
+    if (!DE || !isa<VarDecl>(DE->getDecl())) {
----------------
Doug Gregor wrote:
> It doesn't have to be handled as part of this patch, but within templates 
> you'll also need to handle DependentScopeDeclRefExprs, as well have 
> VD->getType() being type-dependent.
Ok.

================
Comment at: lib/Sema/SemaOpenMP.cpp:422
@@ +421,3 @@
+      if (!CD ||
+          CheckConstructorAccess(ELoc, CD,
+                                 InitializedEntity::InitializeTemporary(Type),
----------------
Doug Gregor wrote:
> Should also check that CD is not deleted and somewhere check for 
> unavailable/deprecated (e.g., via DiagnoseUseOfDecl). I suspect you'll end up 
> building a call to the default constructor to stash in the AST, but that 
> doesn't need to be part of this patch.
> 
> 
Ok.

================
Comment at: lib/Sema/SemaOpenMP.cpp:436
@@ +435,3 @@
+      CXXDestructorDecl *DD = RD->getDestructor();
+      if (DD && !DD->isTrivial()) {
+        if (CheckDestructorAccess(ELoc, DD, PD) == AR_inaccessible) {
----------------
Doug Gregor wrote:
> Why the trivial check?
Sorry, copied from another place.

================
Comment at: lib/Serialization/ASTWriterStmt.cpp:1713
@@ +1712,3 @@
+void ASTStmtWriter::VisitOMPParallelDirective(OMPParallelDirective *D) {
+  VisitOMPExecutableDirective(D);
+  Code = serialization::STMT_OMP_PARALLEL_DIRECTIVE;
----------------
Doug Gregor wrote:
> There are no tests for this code?
I'll add the test


http://llvm-reviews.chandlerc.com/D572
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to