[clang][ASTMatcher] Add Matcher 'dependentSizedExtVectorType'
Add Matcher dependentSizedExtVectorType for DependentSizedExtVectorType. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D157237
This commit is contained in:
parent
0726cb0047
commit
4cce27d918
@ -2531,6 +2531,19 @@ dependentSizedArrayType
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td><td class="name" onclick="toggle('dependentSizedExtVectorType')"><a name="dependentSizedExtVectorType0Anchor">dependentSizedExtVectorType</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DependentSizedExtVectorType.html">DependentSizedExtVectorType</a>>...</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="dependentSizedExtVectorType0"><pre>Matches C++ extended vector type where either the type or size is dependent.
|
||||
|
||||
Given
|
||||
template<typename T, int Size>
|
||||
class vector {
|
||||
typedef T __attribute__((ext_vector_type(Size))) type;
|
||||
};
|
||||
dependentSizedExtVectorType
|
||||
matches "T __attribute__((ext_vector_type(Size)))"
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td><td class="name" onclick="toggle('elaboratedType0')"><a name="elaboratedType0Anchor">elaboratedType</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>>...</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="elaboratedType0"><pre>Matches types specified with an elaborated type keyword or with a
|
||||
qualified name.
|
||||
|
||||
@ -231,6 +231,7 @@ Floating Point Support in Clang
|
||||
|
||||
AST Matchers
|
||||
------------
|
||||
- Add ``dependentSizedExtVectorType``.
|
||||
|
||||
clang-format
|
||||
------------
|
||||
|
||||
@ -6938,6 +6938,21 @@ AST_POLYMORPHIC_MATCHER_P(hasSize,
|
||||
/// matches "T data[Size]"
|
||||
extern const AstTypeMatcher<DependentSizedArrayType> dependentSizedArrayType;
|
||||
|
||||
/// Matches C++ extended vector type where either the type or size is
|
||||
/// dependent.
|
||||
///
|
||||
/// Given
|
||||
/// \code
|
||||
/// template<typename T, int Size>
|
||||
/// class vector {
|
||||
/// typedef T __attribute__((ext_vector_type(Size))) type;
|
||||
/// };
|
||||
/// \endcode
|
||||
/// dependentSizedExtVectorType
|
||||
/// matches "T __attribute__((ext_vector_type(Size)))"
|
||||
extern const AstTypeMatcher<DependentSizedExtVectorType>
|
||||
dependentSizedExtVectorType;
|
||||
|
||||
/// Matches C arrays with unspecified size.
|
||||
///
|
||||
/// Given
|
||||
|
||||
@ -1046,6 +1046,7 @@ const AstTypeMatcher<ConstantArrayType> constantArrayType;
|
||||
const AstTypeMatcher<DeducedTemplateSpecializationType>
|
||||
deducedTemplateSpecializationType;
|
||||
const AstTypeMatcher<DependentSizedArrayType> dependentSizedArrayType;
|
||||
const AstTypeMatcher<DependentSizedExtVectorType> dependentSizedExtVectorType;
|
||||
const AstTypeMatcher<IncompleteArrayType> incompleteArrayType;
|
||||
const AstTypeMatcher<VariableArrayType> variableArrayType;
|
||||
const AstTypeMatcher<AtomicType> atomicType;
|
||||
|
||||
@ -227,6 +227,7 @@ RegistryMaps::RegistryMaps() {
|
||||
REGISTER_MATCHER(defaultStmt);
|
||||
REGISTER_MATCHER(dependentCoawaitExpr);
|
||||
REGISTER_MATCHER(dependentSizedArrayType);
|
||||
REGISTER_MATCHER(dependentSizedExtVectorType);
|
||||
REGISTER_MATCHER(designatedInitExpr);
|
||||
REGISTER_MATCHER(designatorCountIs);
|
||||
REGISTER_MATCHER(doStmt);
|
||||
|
||||
@ -1560,6 +1560,20 @@ TEST_P(ASTMatchersTest, DependentSizedArrayType) {
|
||||
dependentSizedArrayType()));
|
||||
}
|
||||
|
||||
TEST_P(ASTMatchersTest, DependentSizedExtVectorType) {
|
||||
if (!GetParam().isCXX()) {
|
||||
return;
|
||||
}
|
||||
EXPECT_TRUE(matches("template<typename T, int Size>"
|
||||
"class vector {"
|
||||
" typedef T __attribute__((ext_vector_type(Size))) type;"
|
||||
"};",
|
||||
dependentSizedExtVectorType()));
|
||||
EXPECT_TRUE(
|
||||
notMatches("int a[42]; int b[] = { 2, 3 }; void f() { int c[b[0]]; }",
|
||||
dependentSizedExtVectorType()));
|
||||
}
|
||||
|
||||
TEST_P(ASTMatchersTest, IncompleteArrayType) {
|
||||
EXPECT_TRUE(matches("int a[] = { 2, 3 };", incompleteArrayType()));
|
||||
EXPECT_TRUE(matches("void f(int a[]) {}", incompleteArrayType()));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user