[PATCH] [OPENMP] Bug fixes and improvements, part 2
Eli Friedman
eli.friedman at gmail.com
Tue Sep 24 14:55:42 PDT 2013
On Mon, Sep 23, 2013 at 9:01 PM, Alexey Bataev <a.bataev at hotmail.com> wrote:
> Hi doug.gregor, eli.friedman, gribozavr, cbergstrom, hfinkel, wwwwpan,
>
> Improved variable lookup procedure for threadprivate variables.
>
> http://llvm-reviews.chandlerc.com/D1746
>
> Files:
> test/OpenMP/threadprivate_ast_print.cpp
> test/OpenMP/threadprivate_messages.cpp
> lib/Sema/SemaOpenMP.cpp
> lib/AST/DeclPrinter.cpp
>
> Index: test/OpenMP/threadprivate_ast_print.cpp
> ===================================================================
> --- test/OpenMP/threadprivate_ast_print.cpp
> +++ test/OpenMP/threadprivate_ast_print.cpp
> @@ -15,7 +15,7 @@
> static int b;
> // CHECK: static int b;
> #pragma omp threadprivate(b)
> -// CHECK-NEXT: #pragma omp threadprivate(b)
> +// CHECK-NEXT: #pragma omp threadprivate(St1::b)
> } d;
>
> int a, b;
> @@ -38,6 +38,15 @@
> //CHECK-NEXT: static T v;
> //CHECK-NEXT: #pragma omp threadprivate(v)
>
> +namespace ns{
> + int a;
> +}
> +// CHECK: namespace ns {
> +// CHECK-NEXT: int a;
> +// CHECK-NEXT: }
> +#pragma omp threadprivate(ns::a)
> +// CHECK-NEXT: #pragma omp threadprivate(ns::a)
> +
> int main () {
> static int a;
> // CHECK: static int a;
> Index: test/OpenMP/threadprivate_messages.cpp
> ===================================================================
> --- test/OpenMP/threadprivate_messages.cpp
> +++ test/OpenMP/threadprivate_messages.cpp
> @@ -60,12 +60,12 @@
> #pragma omp threadprivate (g)
>
> namespace ns {
> - int m; // expected-note 2 {{'m' defined here}}
> + int m;
> #pragma omp threadprivate (m)
> }
> #pragma omp threadprivate (m) // expected-error {{use of undeclared
> identifier 'm'}}
> -#pragma omp threadprivate (ns::m) // expected-error {{'#pragma omp
> threadprivate' must appear in the scope of the 'ns::m' variable
> declaration}}
> -#pragma omp threadprivate (ns:m) // expected-error {{unexpected ':' in
> nested name specifier; did you mean '::'?}} expected-error {{'#pragma omp
> threadprivate' must appear in the scope of the 'ns::m' variable
> declaration}}
> +#pragma omp threadprivate (ns::m) // expected-error {{'#pragma omp
> threadprivate' must precede all references to variable 'ns::m'}}
> +#pragma omp threadprivate (ns:m) // expected-error {{unexpected ':' in
> nested name specifier; did you mean '::'?}} expected-error {{'#pragma omp
> threadprivate' must precede all references to variable 'ns::m'}}
>
> const int h = 12;
> const volatile int i = 10;
> Index: lib/Sema/SemaOpenMP.cpp
> ===================================================================
> --- lib/Sema/SemaOpenMP.cpp
> +++ lib/Sema/SemaOpenMP.cpp
> @@ -428,7 +428,9 @@
> // A threadprivate directive for static block-scope variables must
> appear
> // in the scope of the variable and not in a nested scope.
> NamedDecl *ND = cast<NamedDecl>(VD);
> - if (!isDeclInScope(ND, getCurLexicalContext(), CurScope)) {
> + if ((!getCurLexicalContext()->isFileContext() ||
> + !VD->getDeclContext()->isFileContext()) &&
> + !isDeclInScope(ND, getCurLexicalContext(), CurScope)) {
> Diag(Id.getLoc(), diag::err_omp_var_scope)
> << getOpenMPDirectiveName(OMPD_threadprivate) << VD;
> bool IsDecl = VD->isThisDeclarationADefinition(Context) ==
>
The comments before this check list four distinct rules for different kinds
of variables. Please implement them explicitly.
-Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130924/b8c2fa5b/attachment.html>
More information about the cfe-commits
mailing list