[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