summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Parse/ParseOpenMP.cpp11
-rw-r--r--clang/test/OpenMP/declare_variant_ast_print.c2
-rw-r--r--clang/test/OpenMP/declare_variant_ast_print.cpp2
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();
OpenPOWER on IntegriCloud