diff options
-rw-r--r-- | clang/lib/Parse/ParseOpenMP.cpp | 11 | ||||
-rw-r--r-- | clang/test/OpenMP/declare_variant_ast_print.c | 2 | ||||
-rw-r--r-- | clang/test/OpenMP/declare_variant_ast_print.cpp | 2 |
3 files changed, 8 insertions, 7 deletions
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index 82a4e700552..760cec258fd 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -17,6 +17,7 @@ #include "clang/Parse/RAIIObjectsForParser.h" #include "clang/Sema/Scope.h" #include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/UniqueVector.h" using namespace clang; @@ -853,7 +854,7 @@ static void parseImplementationSelector( (void)T.expectAndConsume(diag::err_expected_lparen_after, CtxSelectorName.data()); const ExprResult Score = parseContextScore(P); - SmallVector<llvm::SmallString<16>, 4> Vendors; + llvm::UniqueVector<llvm::SmallString<16>> Vendors; do { // Parse <vendor>. StringRef VendorName; @@ -862,7 +863,7 @@ static void parseImplementationSelector( VendorName = P.getPreprocessor().getSpelling(P.getCurToken(), Buffer); (void)P.ConsumeToken(); if (!VendorName.empty()) - Vendors.push_back(VendorName); + Vendors.insert(VendorName); } else { P.Diag(Tok.getLocation(), diag::err_omp_declare_variant_item_expected) << "vendor identifier" @@ -878,10 +879,10 @@ static void parseImplementationSelector( (void)T.consumeClose(); if (!Vendors.empty()) { SmallVector<StringRef, 4> ImplVendors(Vendors.size()); - for (int I = 0, E = Vendors.size(); I < E; ++I) - ImplVendors[I] = Vendors[I]; + llvm::copy(Vendors, ImplVendors.begin()); Sema::OpenMPDeclareVariantCtsSelectorData Data( - OMPDeclareVariantAttr::CtxSetImplementation, CSKind, ImplVendors, + OMPDeclareVariantAttr::CtxSetImplementation, CSKind, + llvm::makeMutableArrayRef(ImplVendors.begin(), ImplVendors.size()), Score); Callback(SourceRange(Loc, Tok.getLocation()), Data); } diff --git a/clang/test/OpenMP/declare_variant_ast_print.c b/clang/test/OpenMP/declare_variant_ast_print.c index a8a11bc53d3..971211c1e94 100644 --- a/clang/test/OpenMP/declare_variant_ast_print.c +++ b/clang/test/OpenMP/declare_variant_ast_print.c @@ -11,7 +11,7 @@ int foo(void); #pragma omp declare variant(foo) match(implementation={vendor(llvm)}) #pragma omp declare variant(foo) match(implementation={vendor(llvm), xxx}) #pragma omp declare variant(foo) match(implementation={vendor(unknown)}) -#pragma omp declare variant(foo) match(implementation={vendor(score(5): ibm, xxx)}) +#pragma omp declare variant(foo) match(implementation={vendor(score(5): ibm, xxx, ibm)}) int bar(void); // CHECK: int foo(); diff --git a/clang/test/OpenMP/declare_variant_ast_print.cpp b/clang/test/OpenMP/declare_variant_ast_print.cpp index ce67b818f30..a026febfb52 100644 --- a/clang/test/OpenMP/declare_variant_ast_print.cpp +++ b/clang/test/OpenMP/declare_variant_ast_print.cpp @@ -40,7 +40,7 @@ int bar(); #pragma omp declare variant(foofoo <T>) match(user = {condition(<expr>)}) #pragma omp declare variant(foofoo <T>) match(implementation={vendor(llvm)}) #pragma omp declare variant(foofoo <T>) match(implementation={vendor(unknown)}) -#pragma omp declare variant(foofoo <T>) match(implementation={vendor(score(C+5): ibm, xxx)}) +#pragma omp declare variant(foofoo <T>) match(implementation={vendor(score(C+5): ibm, xxx, ibm)}) template <typename T, int C> T barbar(); |