10 #include "clang/AST/ASTContext.h" 11 #include "clang/AST/OpenMPClause.h" 12 #include "clang/AST/Stmt.h" 13 #include "clang/AST/StmtOpenMP.h" 14 #include "clang/ASTMatchers/ASTMatchFinder.h" 15 #include "clang/ASTMatchers/ASTMatchers.h" 16 #include "clang/ASTMatchers/ASTMatchersMacros.h" 24 void UseDefaultNoneCheck::registerMatchers(MatchFinder *Finder) {
27 if (!getLangOpts().OpenMP)
31 ompExecutableDirective(
32 allOf(isAllowedToContainClauseKind(OMPC_default),
33 anyOf(unless(hasAnyClause(ompDefaultClause())),
34 hasAnyClause(ompDefaultClause(unless(isNoneKind()))
40 void UseDefaultNoneCheck::check(
const MatchFinder::MatchResult &
Result) {
41 const auto *Directive =
42 Result.Nodes.getNodeAs<OMPExecutableDirective>(
"directive");
43 assert(Directive !=
nullptr &&
"Expected to match some directive.");
45 if (
const auto *Clause = Result.Nodes.getNodeAs<OMPDefaultClause>(
"clause")) {
46 diag(Directive->getBeginLoc(),
47 "OpenMP directive '%0' specifies 'default(%1)' clause, consider using " 48 "'default(none)' clause instead")
49 << getOpenMPDirectiveName(Directive->getDirectiveKind())
50 << getOpenMPSimpleClauseTypeName(Clause->getClauseKind(),
51 Clause->getDefaultKind());
52 diag(Clause->getBeginLoc(),
"existing 'default' clause specified here",
57 diag(Directive->getBeginLoc(),
58 "OpenMP directive '%0' does not specify 'default' clause, consider " 59 "specifying 'default(none)' clause")
60 << getOpenMPDirectiveName(Directive->getDirectiveKind());
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
llvm::Optional< llvm::Expected< tooling::AtomicChanges > > Result