[cfe-dev] canonical type for C++11 auto

Milian Wolff mail at milianw.de
Sun Jul 26 06:31:14 PDT 2015


Hey all,

I want to scratch my own itch by fixing the issue that clang_getCanonicalType 
does not deduce the type for variables such as `auto i = 1;`. See for context:

https://llvm.org/bugs/show_bug.cgi?id=18669
http://clang-developers.42468.n3.nabble.com/API-for-auto-type-deduction-in-libclang-td4037350.html

I added a simple unit test as the first step:

    $ cat test/Index/cxx11-print-type.cpp
    auto a = 1;

    // RUN: c-index-test -test-print-type -std=c++11 %s | FileCheck %s
    // CHECK: VarDecl=a:1:6 [type=auto] [typeKind=Unexposed]
    [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]

Running the first half manually I get:

    VarDecl=a:1:6 (Definition) [type=auto] [typekind=Unexposed] [isPOD=0]

Sadly, I'm a bit lost as to where I'd have to fix this. Looking at 
CXType.cpp's clang_getCanonicalType implementation, I tried something like 
this:

    fprintf(stderr, "--------------> undeduced?: %d\n", T->isUndeducedType());
    if (T->isUndeducedType()) {
      auto d = T->getContainedAutoType()->getDeducedType();
      fprintf(stderr, "--------------> deduced valid? %d\n", !d.isNull());
      if (!d.isNull()) {
        T = d;
      }
    }
 
This shows me that for the above input (i.e. `auto i = 1;`), the type is 
undeduced, but I also cannot force deduction by getDeducedType (probably me 
abusing/misinterpreting the API). So what can be done here - how could it be 
fixed? Where would it be fixed?

Thanks

-- 
Milian Wolff
mail at milianw.de
http://milianw.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150726/3ccc2df3/attachment.sig>


More information about the cfe-dev mailing list