[cfe-dev] Working with ConceptClang: Binding input arguments to functions.

Larisse Voufo lvoufo at cs.indiana.edu
Fri Apr 22 02:05:04 PDT 2011


Here's a basic example I've been trying to get to work:

explicit concept A<typename T> {
    typename AType;

    AType h(AType a) {
        return a;
    }

    AType f(AType a) {
        AType b;
        return b;
    }
}

concept_map A<int> {
    typedef char AType;
}

template<typename T>
requires (A<T>)
void func(T a, AType b) {
    AType x = h(b);         // <-- Instantiation DOES NOT WORK
    AType y = f(b);          // <-- Instantiation WORKS
}

int main(int argc, char **argv)
{
    func<int>(10, 'a');      // Fails with declaration for 'x', for passes
with declaration of 'y'.
}


It appears that during the instantiation of *func<int>()*, the value for
input parameter '*b*' for '*func()*'
can be looked up no problem. However, that of '*a*' for associated function
'*h()*' cannot.
Instead, a call to
*clang::LocalInstantiationScope::getInstantiationOf()*fails at runtime
on the assertion:

*(D->isInvalidDecl() && "declaration was not instantiated in this scope!")*.

I have been tracing through the procedures for building, transforming, and
rebuilding Call Expressions -- as well as instantiating functions, noting
each
execution of *clang::LocalInstantiationScope::getInstantiationOf()* and *
clang::LocalInstantiationScope::InstantiatedLocal()*...

Still, I can't see what needs to be done differently for calls to *h()* from
calls to *func<int>()*. Hence...

Question:
When/how exactly are input arguments bound to functions?
Why would the current procedure fail to bind the value of '*b*' from the
context of *func<int>()* to the
parameter '*a*' of '*h()*' ?


Thanks,

-- Larisse.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110422/e39f5058/attachment.html>


More information about the cfe-dev mailing list