Commit 61683376 authored by erichkeane's avatar erichkeane
Browse files

[OpenACC] Handle lack of construct/directive

Discovered while working on another patch, this patch fixes the case
where are construct/directive name isn't provided.
parent 52df67ba
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1357,6 +1357,7 @@ def warn_pragma_acc_unimplemented_clause_parsing
      InGroup<SourceUsesOpenACC>;
def err_acc_invalid_directive
    : Error<"invalid OpenACC directive '%0'">;
def err_acc_missing_directive : Error<"expected OpenACC directive">;

// OpenMP support.
def warn_pragma_omp_ignored : Warning<
+8 −0
Original line number Diff line number Diff line
@@ -42,6 +42,14 @@ OpenACCDirectiveKind GetOpenACCDirectiveKind(StringRef Name) {
// Parse and consume the tokens for OpenACC Directive/Construct kinds.
OpenACCDirectiveKind ParseOpenACCDirectiveKind(Parser &P) {
  Token FirstTok = P.getCurToken();

  // Just #pragma acc can get us immediately to the end, make sure we don't
  // introspect on the spelling before then.
  if (FirstTok.isAnnotation()) {
    P.Diag(FirstTok, diag::err_acc_missing_directive);
    return OpenACCDirectiveKind::Invalid;
  }

  P.ConsumeToken();
  std::string FirstTokSpelling = P.getPreprocessor().getSpelling(FirstTok);

+6 −0
Original line number Diff line number Diff line
// RUN: %clang_cc1 %s -verify -fopenacc

void func() {

  // expected-error@+2{{expected OpenACC directive}}
  // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc
  for(;;){}

  // expected-error@+2{{invalid OpenACC directive 'invalid'}}
  // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
#pragma acc invalid