I have the following example: In a header somewhere: namespace Kokkos { using DefaultHostExecutionSpace = Serial; }
In a different header somewhere namespace Kokkos{ template<typename T> class RangePolicy; } struct GoodClass { int foo; KOKKOS_INLINE_FUNCTION GoodClass(int f) : foo(f) {} KOKKOS_INLINE_FUNCTION void method() { Kokkos::parallel_for( Kokkos::RangePolicy<Kokkos::DefaultHostExecutionSpace>(0, 42), KOKKOS_LAMBDA(int i) { do_something(foo, i); }); } }; Once I have the CallExpr to the parallel_for I use the following matcher on it: auto FilterArgs = hasAnyArgument( expr(hasType(cxxRecordDecl(isDerivedFrom(cxxRecordDecl( matchesName("Impl::PolicyTraits")))) // This will cause it to match the first argument .bind("decl"))) .bind("expr")); I am trying to detect that the template type on the RangePolicy is Kokkos::DefaultHostExecutionSpace and not Serial. My question is can I only see the typedef at the expression that constructs the object or can I deduce that Serial was actually the result of the typedef from the CXXRecordDecl? I can’t just find the typedefdecl because I only want to detect when it was explicitly Kokkos::DefaultHostExecutionSpace, Serial could come from some other context that I don’t want to match on. When I dump the expr from the the above matcher I get: `-CXXTemporaryObjectExpr 0x7007f50 'Kokkos::RangePolicy<Kokkos::DefaultHostExecutionSpace>':'class Kokkos::RangePolicy<class Kokkos::Serial>' 'void (const Kokkos::RangePolicy<class Kokkos::Serial>::member_type, const Kokkos::RangePolicy<class Kokkos::Serial>::member_type)’ But if I dump the decl I can only see: ClassTemplateSpecializationDecl 0x7e6eb70 </path/to/the/file/Kokkos_ExecPolicy.hpp:93:1, line:279:1> line:94:7 class RangePolicy definition |-DefinitionData pass_in_registers standard_layout trivially_copyable has_user_declared_ctor can_const_default_init | |-DefaultConstructor exists non_trivial user_provided | |-CopyConstructor trivial user_declared has_const_param needs_overload_resolution implicit_has_const_param | |-MoveConstructor exists trivial user_declared | |-CopyAssignment trivial has_const_param implicit_has_const_param | |-MoveAssignment | `-Destructor simple irrelevant trivial |-public 'Impl::PolicyTraits<Serial>':'Kokkos::Impl::PolicyTraits<Kokkos::Serial>' |-TemplateArgument pack | `-TemplateArgument type 'Kokkos::Serial' Thanks, Drew _______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users