jhuber6 updated this revision to Diff 533000. jhuber6 added a comment. Adding AST mutation listener to the other modified declaration to signal that it was changed.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D153369/new/ https://reviews.llvm.org/D153369 Files: clang/lib/Sema/SemaOpenMP.cpp clang/test/AST/dump.cpp Index: clang/test/AST/dump.cpp =================================================================== --- clang/test/AST/dump.cpp +++ clang/test/AST/dump.cpp @@ -79,11 +79,32 @@ } #pragma omp end declare target -// CHECK: `-FunctionDecl {{.+}} <line:[[@LINE-6]]:1, line:[[@LINE-3]]:1> line:[[@LINE-6]]:5 bar 'int ()' -// CHECK-NEXT: |-CompoundStmt {{.+}} <col:11, line:[[@LINE-4]]:1> -// CHECK-NEXT: | |-DeclStmt {{.+}} <line:[[@LINE-7]]:3, col:8> -// CHECK-NEXT: | | `-VarDecl {{.+}} <col:3, col:7> col:7 used f 'int' -// CHECK-NEXT: | `-ReturnStmt {{.+}} <line:[[@LINE-8]]:3, col:10> -// CHECK-NEXT: | `-ImplicitCastExpr {{.+}} <col:10> 'int' <LValueToRValue> -// CHECK-NEXT: | `-DeclRefExpr {{.+}} <col:10> 'int' lvalue Var {{.+}} 'f' 'int' -// CHECK-NEXT: `-OMPDeclareTargetDeclAttr {{.+}} <line:75:21> Implicit MT_To DT_Any 1 +// CHECK: |-FunctionDecl {{.+}} <line:[[@LINE-6]]:1, line:[[@LINE-3]]:1> line:[[@LINE-6]]:5 bar 'int ()' +// CHECK-NEXT: | |-CompoundStmt {{.+}} <col:11, line:[[@LINE-4]]:1> +// CHECK-NEXT: | | |-DeclStmt {{.+}} <line:[[@LINE-7]]:3, col:8> +// CHECK-NEXT: | | | `-VarDecl {{.+}} <col:3, col:7> col:7 used f 'int' +// CHECK-NEXT: | | `-ReturnStmt {{.+}} <line:[[@LINE-8]]:3, col:10> +// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} <col:10> 'int' <LValueToRValue> +// CHECK-NEXT: | | `-DeclRefExpr {{.+}} <col:10> 'int' lvalue Var {{.+}} 'f' 'int' +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-14]]:21> Implicit MT_To DT_Any 1 + +int dx; + +extern int dx; +#pragma omp declare target to(dx) + +// CHECK: |-VarDecl {{.+}} <line:[[@LINE-5]]:1, col:5> col:5 dx 'int' +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-3]]:31> Implicit MT_To DT_Any 4294967295 +// CHECK: |-VarDecl {{.+}} prev {{.+}} <line:[[@LINE-5]]:1, col:12> col:12 dx 'int' extern +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-5]]:31> Implicit MT_To DT_Any 4294967295 + +int dy; + +#pragma omp begin declare target +extern int dy; +#pragma omp end declare target + +// CHECK: |-VarDecl {{.+}} <line:[[@LINE-6]]:1, col:5> col:5 dy 'int' +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-5]]:27> Implicit MT_To DT_Any 1 +// CHECK: `-VarDecl {{.+}} prev {{.+}} <line:[[@LINE-5]]:1, col:12> col:12 dy 'int' extern +// CHECK-NEXT: `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-7]]:27> Implicit MT_To DT_Any 1 Index: clang/lib/Sema/SemaOpenMP.cpp =================================================================== --- clang/lib/Sema/SemaOpenMP.cpp +++ clang/lib/Sema/SemaOpenMP.cpp @@ -22986,6 +22986,9 @@ Context, MT, DTCI.DT, IndirectE, IsIndirect, Level, SourceRange(Loc, Loc)); ND->addAttr(A); + if (auto *CD = dyn_cast<NamedDecl>(ND->getCanonicalDecl())) + if (!CD->hasAttr<OMPDeclareTargetDeclAttr>()) + CD->addAttr(A); if (ASTMutationListener *ML = Context.getASTMutationListener()) ML->DeclarationMarkedOpenMPDeclareTarget(ND, A); checkDeclIsAllowedInOpenMPTarget(nullptr, ND, Loc); @@ -23090,8 +23093,15 @@ DTCI.DT, IndirectE, IsIndirect, Level, SourceRange(DTCI.Loc, DTCI.Loc)); D->addAttr(A); - if (ASTMutationListener *ML = Context.getASTMutationListener()) + if (auto *CD = dyn_cast<NamedDecl>(D->getCanonicalDecl())) + if (!CD->hasAttr<OMPDeclareTargetDeclAttr>()) + CD->addAttr(A); + if (ASTMutationListener *ML = Context.getASTMutationListener()) { ML->DeclarationMarkedOpenMPDeclareTarget(D, A); + if (auto *CD = dyn_cast<NamedDecl>(D->getCanonicalDecl())) + if (!CD->hasAttr<OMPDeclareTargetDeclAttr>()) + ML->DeclarationMarkedOpenMPDeclareTarget(CD, A); + } } return; }
Index: clang/test/AST/dump.cpp =================================================================== --- clang/test/AST/dump.cpp +++ clang/test/AST/dump.cpp @@ -79,11 +79,32 @@ } #pragma omp end declare target -// CHECK: `-FunctionDecl {{.+}} <line:[[@LINE-6]]:1, line:[[@LINE-3]]:1> line:[[@LINE-6]]:5 bar 'int ()' -// CHECK-NEXT: |-CompoundStmt {{.+}} <col:11, line:[[@LINE-4]]:1> -// CHECK-NEXT: | |-DeclStmt {{.+}} <line:[[@LINE-7]]:3, col:8> -// CHECK-NEXT: | | `-VarDecl {{.+}} <col:3, col:7> col:7 used f 'int' -// CHECK-NEXT: | `-ReturnStmt {{.+}} <line:[[@LINE-8]]:3, col:10> -// CHECK-NEXT: | `-ImplicitCastExpr {{.+}} <col:10> 'int' <LValueToRValue> -// CHECK-NEXT: | `-DeclRefExpr {{.+}} <col:10> 'int' lvalue Var {{.+}} 'f' 'int' -// CHECK-NEXT: `-OMPDeclareTargetDeclAttr {{.+}} <line:75:21> Implicit MT_To DT_Any 1 +// CHECK: |-FunctionDecl {{.+}} <line:[[@LINE-6]]:1, line:[[@LINE-3]]:1> line:[[@LINE-6]]:5 bar 'int ()' +// CHECK-NEXT: | |-CompoundStmt {{.+}} <col:11, line:[[@LINE-4]]:1> +// CHECK-NEXT: | | |-DeclStmt {{.+}} <line:[[@LINE-7]]:3, col:8> +// CHECK-NEXT: | | | `-VarDecl {{.+}} <col:3, col:7> col:7 used f 'int' +// CHECK-NEXT: | | `-ReturnStmt {{.+}} <line:[[@LINE-8]]:3, col:10> +// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} <col:10> 'int' <LValueToRValue> +// CHECK-NEXT: | | `-DeclRefExpr {{.+}} <col:10> 'int' lvalue Var {{.+}} 'f' 'int' +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-14]]:21> Implicit MT_To DT_Any 1 + +int dx; + +extern int dx; +#pragma omp declare target to(dx) + +// CHECK: |-VarDecl {{.+}} <line:[[@LINE-5]]:1, col:5> col:5 dx 'int' +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-3]]:31> Implicit MT_To DT_Any 4294967295 +// CHECK: |-VarDecl {{.+}} prev {{.+}} <line:[[@LINE-5]]:1, col:12> col:12 dx 'int' extern +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-5]]:31> Implicit MT_To DT_Any 4294967295 + +int dy; + +#pragma omp begin declare target +extern int dy; +#pragma omp end declare target + +// CHECK: |-VarDecl {{.+}} <line:[[@LINE-6]]:1, col:5> col:5 dy 'int' +// CHECK-NEXT: | `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-5]]:27> Implicit MT_To DT_Any 1 +// CHECK: `-VarDecl {{.+}} prev {{.+}} <line:[[@LINE-5]]:1, col:12> col:12 dy 'int' extern +// CHECK-NEXT: `-OMPDeclareTargetDeclAttr {{.+}} <line:[[@LINE-7]]:27> Implicit MT_To DT_Any 1 Index: clang/lib/Sema/SemaOpenMP.cpp =================================================================== --- clang/lib/Sema/SemaOpenMP.cpp +++ clang/lib/Sema/SemaOpenMP.cpp @@ -22986,6 +22986,9 @@ Context, MT, DTCI.DT, IndirectE, IsIndirect, Level, SourceRange(Loc, Loc)); ND->addAttr(A); + if (auto *CD = dyn_cast<NamedDecl>(ND->getCanonicalDecl())) + if (!CD->hasAttr<OMPDeclareTargetDeclAttr>()) + CD->addAttr(A); if (ASTMutationListener *ML = Context.getASTMutationListener()) ML->DeclarationMarkedOpenMPDeclareTarget(ND, A); checkDeclIsAllowedInOpenMPTarget(nullptr, ND, Loc); @@ -23090,8 +23093,15 @@ DTCI.DT, IndirectE, IsIndirect, Level, SourceRange(DTCI.Loc, DTCI.Loc)); D->addAttr(A); - if (ASTMutationListener *ML = Context.getASTMutationListener()) + if (auto *CD = dyn_cast<NamedDecl>(D->getCanonicalDecl())) + if (!CD->hasAttr<OMPDeclareTargetDeclAttr>()) + CD->addAttr(A); + if (ASTMutationListener *ML = Context.getASTMutationListener()) { ML->DeclarationMarkedOpenMPDeclareTarget(D, A); + if (auto *CD = dyn_cast<NamedDecl>(D->getCanonicalDecl())) + if (!CD->hasAttr<OMPDeclareTargetDeclAttr>()) + ML->DeclarationMarkedOpenMPDeclareTarget(CD, A); + } } return; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits