[OPENMP 4.0] Support for 'inbranch|noinbranch' clauses in 'declare
simd'.
Added parsing/semantic analysis for 'inbranch|notinbranch' clauses of
'#pragma omp declare simd' construct.
llvm-svn: 265287
diff --git a/clang/test/OpenMP/declare_simd_ast_print.c b/clang/test/OpenMP/declare_simd_ast_print.c
index d2b91eb..5cadd00 100644
--- a/clang/test/OpenMP/declare_simd_ast_print.c
+++ b/clang/test/OpenMP/declare_simd_ast_print.c
@@ -8,9 +8,13 @@
#pragma omp declare simd
#pragma omp declare simd
+#pragma omp declare simd inbranch
+#pragma omp declare simd notinbranch
void add_1(float *d, float *s1, float *s2) __attribute__((cold));
-// CHECK: #pragma omp declare simd
+// CHECK: #pragma omp declare simd notinbranch
+// CHECK-NEXT: #pragma omp declare simd inbranch
+// CHECK-NEXT: #pragma omp declare simd
// CHECK-NEXT: #pragma omp declare simd
// CHECK-NEXT: void add_1(float *d, float *s1, float *s2) __attribute__((cold))
diff --git a/clang/test/OpenMP/declare_simd_ast_print.cpp b/clang/test/OpenMP/declare_simd_ast_print.cpp
index aff2c94..4cee8df 100644
--- a/clang/test/OpenMP/declare_simd_ast_print.cpp
+++ b/clang/test/OpenMP/declare_simd_ast_print.cpp
@@ -7,9 +7,13 @@
#define HEADER
#pragma omp declare simd
+#pragma omp declare simd inbranch
+#pragma omp declare simd notinbranch
void add_1(float *d) __attribute__((cold));
-// CHECK: #pragma omp declare simd
+// CHECK: #pragma omp declare simd notinbranch
+// CHECK-NEXT: #pragma omp declare simd inbranch
+// CHECK-NEXT: #pragma omp declare simd
// CHECK-NEXT: void add_1(float *d) __attribute__((cold));
//
diff --git a/clang/test/OpenMP/declare_simd_messages.cpp b/clang/test/OpenMP/declare_simd_messages.cpp
index 2085bfc..76fdc2d 100644
--- a/clang/test/OpenMP/declare_simd_messages.cpp
+++ b/clang/test/OpenMP/declare_simd_messages.cpp
@@ -46,6 +46,12 @@
h((float *)hp, (float *)hp2, (float *)hq, (float *)lin);
}
+#pragma omp declare simd inbranch inbranch
+#pragma omp declare simd notinbranch notinbranch
+#pragma omp declare simd inbranch inbranch notinbranch // expected-error {{unexpected 'notinbranch' clause, 'inbranch' is specified already}}
+#pragma omp declare simd notinbranch notinbranch inbranch // expected-error {{unexpected 'inbranch' clause, 'notinbranch' is specified already}}
+void foo();
+
template <class T>
struct St {
// expected-error@+2 {{function declaration is expected after 'declare simd' directive}}
diff --git a/clang/test/OpenMP/dump.cpp b/clang/test/OpenMP/dump.cpp
index 5059a04..b08df67 100644
--- a/clang/test/OpenMP/dump.cpp
+++ b/clang/test/OpenMP/dump.cpp
@@ -59,10 +59,10 @@
// CHECK-NEXT: | | | | `-DeclRefExpr {{.+}} <<invalid sloc>> 'int' lvalue OMPCapturedExpr {{.+}} 'a' 'int &'
#pragma omp declare simd
-#pragma omp declare simd
+#pragma omp declare simd inbranch
void foo();
// CHECK: `-FunctionDecl {{.+}} <line:63:1, col:10> col:6 foo 'void (void)'
-// CHECK-NEXT: |-OMPDeclareSimdDeclAttr {{.+}} <line:62:9> Implicit
-// CHECK-NEXT: `-OMPDeclareSimdDeclAttr {{.+}} <line:61:9> Implicit
+// CHECK-NEXT: |-OMPDeclareSimdDeclAttr {{.+}} <line:62:9, col:34> Implicit BS_Inbranch
+// CHECK-NEXT: `-OMPDeclareSimdDeclAttr {{.+}} <line:61:9, col:25> Implicit BS_Undefined