<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jun 12, 2015 at 10:53 AM, Peter Stirling <span dir="ltr"><<a href="mailto:peter@pjstirling.plus.com" target="_blank">peter@pjstirling.plus.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Thanks! Adding a call to that from the
constructor of my ASTConsumer stops the crash.<br>
<br>
Now for my next mole!<br>
<br>
Calling InstantiateFunction() is triggering diagnostics (irksome)
and (it appears) causes the tool to return a non-zero exit status
(which is more problematic for my use case).<br>
<br>
I tried creating a SFINAETrap on the stack, but it appears to do
nothing, I assume that this is because I somehow have to tell my
Sema that it shouldn't emit errors? I've also tried using a
DiagnosticErrorTrap, and that does notice the errors, but it also
doesn't prevent the diagnostics being output, or the exit status.<br></div></div></blockquote><div><br></div><div>This is probably because the diagnostics are not in the "immediate context" of the substitution (that is, they're not diagnostics that a SFINAE check can detect, they're hard errors). We don't have a way to suppress those diagnostics and return to a state as if the instantiation never happened (the C++ language doesn't require such a mechanism). After such a diagnostic occurs, parts of your AST might be marked as "invalid", and we might suppress further diagnostics (possibly resulting in a later instantiation succeeding when it would have failed if run from a clean state). If you're OK with that, I think there's a flag on the DiagnosticsEngine to suppress *all* diagnostics.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000"><div>
It feels like I'm getting closer. :)<div><div class="h5"><br>
<br>
On 05/06/15 23:49, Richard Smith wrote:<br>
</div></div></div><div><div class="h5">
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Wed, Jun 3, 2015 at 9:42 AM, Peter
Stirling <span dir="ltr"><<a href="mailto:peter@pjstirling.plus.com" target="_blank">peter@pjstirling.plus.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>I've done a bit of debugging to find the source of
the crash:<br>
<br>
Sema::LazilyCreateBuiltin() calls
Sema::PushOnScopeChains() passing Sema.TUScope, and
PushOnScopeChains() doesn't test for nullptr. <br>
<br>
It appears that TUScope is always null (or at least by
the time of the first check for error-free
instantiation it is null). Is this expected?</div>
</div>
</blockquote>
<div><br>
</div>
<div>Yes, the TUScope only lives until the end of the TU. If
you want to do more template instantiation after parsing,
you can call Preprocessor::enableIncrementalProcessing()
to let Clang know that the end of the main source file
isn't the end of the TU.</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>
<div>
<div> On 01/06/15 11:45, Peter Stirling
wrote:<br>
</div>
</div>
</div>
<div>
<div>
<blockquote type="cite">
<div>Trying this again...<br>
<br>
Using this code:<br>
<br>
if(inInstantiation) {<br>
std::cerr << wrapGreen("testing ",
colour) << declToString(d) << "(";<br>
bool seen = false;<br>
for(auto param : d->params()) {<br>
if(seen) {<br>
std::cerr << ", ";<br>
}<br>
seen = true;<br>
std::cerr <<
wrapGreen(typeToString(param->getType()),
colour);<br>
}<br>
std::cerr << ")\n";<br>
clang::Sema::SFINAETrap trap(sema);<br>
sema.InstantiateFunctionDefinition(d->getParent()->getLocation(),
d, true, true);<br>
if(trap.hasErrorOccurred()) {<br>
std::cerr << wrapRed("test
failed\n", colour);<br>
return false;<br>
}<br>
else {<br>
std::cerr << wrapGreen("test
passed\n", colour);<br>
}<br>
}<br>
<br>
I was hoping to find out if there were
instantiation errors with methods. However on my
test TU it crashes with the backtrace in my
previous email. In a simpler TU it doesn't
crash, but it also doesn't work! Here is the
last page of its output:<br>
<br>
testing std::__1::pair<int const, int
const>::swap(std::__1::pair<int const, int
const>&)<br>
In file included from
/home/peter/Programming/llvm/extra-dir/quaff/test.cc:1:<br>
In file included from
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/utility:157:<br>
In file included from
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/__tuple:16:<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/type_traits:3592:38:
error: no matching function for call to 'swap'<br>
_NOEXCEPT_(_NOEXCEPT_(swap(*_VSTD::declval<_ForwardIterator1>(),<br>
^~~~<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/__config:362:34:
note: expanded from macro '_NOEXCEPT_'<br>
# define _NOEXCEPT_(x) noexcept(x)<br>
^<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/__config:362:34:
note: expanded from macro '_NOEXCEPT_'<br>
# define _NOEXCEPT_(x) noexcept(x)<br>
^<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/utility:391:16:
note: in instantiation of exception
specification for 'iter_swap<const int *,
const int *>' requested here<br>
_VSTD::iter_swap(&first,
&__p.first);<br>
^<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/utility:253:30:
note: in instantiation of member function
'std::__1::pair<const int, const
int>::swap' requested here<br>
struct _LIBCPP_TYPE_VIS_ONLY pair<br>
^<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/type_traits:3573:5:
note: candidate template ignored: disabled by
'enable_if' [with _Tp = const int]<br>
is_move_constructible<_Tp>::value
&&<br>
^<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/type_traits:3595:5:
error: no matching function for call to 'swap'<br>
swap(*__a, *__b);<br>
^~~~<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/utility:391:16:
note: in instantiation of function template
specialization 'std::__1::iter_swap<const int
*, const int *>' requested here<br>
_VSTD::iter_swap(&first,
&__p.first);<br>
^<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/utility:253:30:
note: in instantiation of member function
'std::__1::pair<const int, const
int>::swap' requested here<br>
struct _LIBCPP_TYPE_VIS_ONLY pair<br>
^<br>
/home/peter/Programming/llvm/ninja/bin/../include/c++/v1/type_traits:3573:5:
note: candidate template ignored: disabled by
'enable_if' [with _Tp = const int]<br>
is_move_constructible<_Tp>::value
&&<br>
^<br>
test passed<br>
testing std::__1::pair<int const, int
const>::~pair()<br>
test passed<br>
testing std::__1::pair<int const, int
const>::~pair()<br>
test passed<br>
Handled 517 functions<br>
Handled 120 functions that didn't require a
wrapper<br>
Skipped 264 functions due to unsafe types<br>
Excluded 2 functions, due to function or type
name blacklist<br>
Skipped 4 deleted functions<br>
Handled 429 instantiated template methods<br>
sending output to
/home/peter/Programming/llvm/extra-dir/quaff/test.cc.json<br>
Saw 281 type(s) and 364 qual-type(s)<br>
6 errors generated.<br>
Error while processing
/home/peter/Programming/llvm/extra-dir/quaff/test.cc.<br>
<br>
So, the SFINAETrap is returning false from
hasErrorOccurred() even though, clearly, errors
are happening. How am I supposed to use it?<br>
<br>
On 09/05/15 22:00, Peter Stirling wrote:<br>
</div>
<blockquote type="cite">
<div>I forgot to mention that I'm also spamming
each test as it's performed, the last few
lines of which are:<br>
<br>
std::__1::__tuple_like<std::__1::pair<TagLib::String,
TagLib::StringList> const>::operator =<br>
std::__1::pair<unsigned long, unsigned
long>::operator =<br>
std::__1::pair<unsigned long, unsigned
long>::operator =<br>
std::__1::pair<unsigned long, unsigned
long>::swap<br>
std::__1::pair<TagLib::String const,
TagLib::StringList>::operator =<br>
<br>
So it appears to be crashing on the first
instantiation of std::pair::operator= with a
const type<br>
<br>
On 09/05/15 21:36, Peter Stirling wrote:<br>
</div>
<blockquote type="cite">
<div>On 04/05/15 19:00, Reid Kleckner wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Sat, May 2,
2015 at 2:06 PM, Peter Stirling <span dir="ltr"><<a href="mailto:peter@pjstirling.plus.com" target="_blank">peter@pjstirling.plus.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>
<div>
<div>On 28/04/15 23:31, Reid
Kleckner wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On
Wed, Apr 15, 2015 at
10:25 PM, Peter
Stirling <span dir="ltr"><<a href="mailto:peter@pjstirling.plus.com" target="_blank">peter@pjstirling.plus.com</a>></span>
wrote:
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>
Visitor::RequestCompleteType()
calls
Sema::RequireCompleteType()
(which IMO has
the wrong name,
it returns false
on what I would
consider, from
the name,
success).<br>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>Much has been
made about the sense
of boolean return
values in Clang. It
isn't consistent or
sane, but such is
life. =/</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div> So, I don't
construct the
specializations
for methods
directly in my
code, I assume
that some of the
instantiation is
performed by
RequireCompleteType(),
but surely if I
checked for
SFINAE at that
level then I
would lose EVERY
methods for
std::pair<int
const, int
const> and
not just the
ones that
involve
mutation?</div>
</div>
</blockquote>
<div><br>
</div>
<div>I think
RequireCompleteType
won't instantiate
all the member
functions, like
operator=, but you
can look it up, and
ask for an
instantiation of it.</div>
</div>
</div>
</div>
</blockquote>
<br>
</div>
</div>
Perhaps I misunderstand what you
mean by 'instantiate' but this
doesn't seem to be the case. When
I walk the CXXRecordDecl for
'std::pair<int const, int
const>' there ARE declarations
for the methods that require
mutation. My tool scans the AST
for functions and methods and
outputs a file containing
functions that invoke the ones it
finds, which is then compiled into
a shared library, so what I want
is protection against functions
that can't be called.<br>
<br>
How do I go about asking for an
instantiation of a method on its
own?<br>
</div>
</blockquote>
</div>
<br>
</div>
<div class="gmail_extra">Right,
instantiating the class will create
decls of all the member functions, but
the bodies will be empty because C++
essentially requires that they be parsed
lazily. I'd have to lookup the detailed
mechanics, but you should be able to
look at the method decl, figure out that
it needs instantiation, instantiate it,
and put the error trap around that.</div>
</div>
</blockquote>
<br>
I added the following test:<br>
<br>
if(inInstantiation) {<br>
clang::Sema::SFINAETrap trap(sema);<br>
sema.InstantiateFunctionDefinition(d->getParent()->getLocation(),
d, true, true);<br>
if(trap.hasErrorOccurred()) {<br>
return false;<br>
}<br>
}<br>
<br>
Now I'm hitting a seg-fault (null pointer)
deep inside clang:<br>
<br>
Program received signal SIGSEGV, Segmentation
fault.<br>
clang::Scope::getEntity (this=0x0) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Scope.h:310<br>
310 DeclContext *getEntity() const {
return Entity; }<br>
(gdb) bt<br>
#0 clang::Scope::getEntity (this=0x0) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Scope.h:310<br>
#1 0x00007ffff535cdaf in
clang::Sema::PushOnScopeChains (this=0x6b6e00,
D=0x38392c8, S=0x0, AddToContext=true) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDecl.cpp:1190<br>
#2 0x00007ffff535ef9a in
clang::Sema::LazilyCreateBuiltin
(this=0x6b6e00, II=0x69f638, ID=370, S=0x0,
ForRedeclaration=false, Loc=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDecl.cpp:1778<br>
#3 0x00007ffff572247e in LookupBuiltin
(S=..., R=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaLookup.cpp:544<br>
#4 0x00007ffff5722240 in
clang::Sema::LookupName (this=0x6b6e00, R=...,
S=0x0, AllowBuiltinCreation=true) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaLookup.cpp:1426<br>
#5 0x00007ffff572362c in
clang::Sema::LookupParsedName (this=0x6b6e00,
R=..., S=0x0, SS=0x7ffffffea958,
AllowBuiltinCreation=true,
EnteringContext=false) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaLookup.cpp:1868<br>
#6 0x00007ffff5524491 in
clang::Sema::ActOnIdExpression (this=0x6b6e00,
S=0x0, SS=..., TemplateKWLoc=..., Id=...,
HasTrailingLParen=true,
IsAddressOfOperand=false, <br>
CCC=std::unique_ptr<clang::CorrectionCandidateCallback>
containing 0x0, IsInlineAsmIdentifier=false,
KeywordReplacement=0x0) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:2114<br>
#7 0x00007ffff5523d96 in
clang::Sema::DefaultVariadicArgumentPromotion
(this=0x6b6e00, E=0x38383f0,
CT=clang::Sema::VariadicConstructor,
FDecl=0x878b20) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:936<br>
#8 0x00007ffff55367c6 in
clang::Sema::GatherArgumentsForCall
(this=0x6b6e00, CallLoc=..., FDecl=0x878b20,
Proto=0x878ad0, FirstParam=0, Args=...,
AllArgs=...,
CallType=clang::Sema::VariadicConstructor,
AllowExplicit=false, <br>
IsListInitialization=false) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4477<br>
#9 0x00007ffff5426487 in
clang::Sema::CompleteConstructorCall
(this=0x6b6e00, Constructor=0x878b20,
ArgsPtr=..., Loc=..., ConvertedArgs=...,
AllowExplicit=false,
IsListInitialization=false)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp:11427<br>
#10 0x00007ffff56f4184 in
clang::InitializationSequence::Perform
(this=0x7ffffffebff0, S=..., Entity=...,
Kind=..., Args=..., ResultType=0x0) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaInit.cpp:6189<br>
#11 0x00007ffff56fe47b in
clang::Sema::PerformCopyInitialization
(this=0x6b6e00, Entity=..., EqualLoc=...,
Init=..., TopLevelOfInitList=false,
AllowExplicit=false)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaInit.cpp:7495<br>
#12 0x00007ffff55364e9 in
clang::Sema::GatherArgumentsForCall
(this=0x6b6e00, CallLoc=..., FDecl=0x3839080,
Proto=0x3839010, FirstParam=0, Args=...,
AllArgs=...,
CallType=clang::Sema::VariadicDoesNotApply,
AllowExplicit=false, <br>
IsListInitialization=false) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4433<br>
#13 0x00007ffff5535c19 in
clang::Sema::ConvertArgumentsForCall
(this=0x6b6e00, Call=0x3839240, Fn=0x3839228,
FDecl=0x3839080, Proto=0x3839010, Args=...,
RParenLoc=..., IsExecConfig=false)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4378<br>
#14 0x00007ffff5538209 in
clang::Sema::BuildResolvedCallExpr
(this=0x6b6e00, Fn=0x3839228, NDecl=0x3839080,
LParenLoc=..., Args=..., RParenLoc=...,
Config=0x0, IsExecConfig=false)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4964<br>
#15 0x00007ffff57b4ad2 in
FinishOverloadedCallExpr (SemaRef=..., S=0x0,
Fn=0x3839190, ULE=0x3837ab8, LParenLoc=...,
Args=..., RParenLoc=..., ExecConfig=0x0,
CandidateSet=0x7ffffffee548,
Best=0x7ffffffee510, <br>
OverloadResult=clang::OR_Success,
AllowTypoCorrection=true) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaOverload.cpp:10798<br>
#16 0x00007ffff57b47cd in
clang::Sema::BuildOverloadedCallExpr
(this=0x6b6e00, S=0x0, Fn=0x3837ab8,
ULE=0x3837ab8, LParenLoc=..., Args=...,
RParenLoc=..., ExecConfig=0x0,
AllowTypoCorrection=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaOverload.cpp:10871<br>
#17 0x00007ffff5525999 in
clang::Sema::ActOnCallExpr (this=0x6b6e00,
S=0x0, Fn=0x3837ab8, LParenLoc=...,
ArgExprs=..., RParenLoc=..., ExecConfig=0x0,
IsExecConfig=false)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4768<br>
#18 0x00007ffff5975fee in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::RebuildCallExpr
(this=0x7fffffff2738, Callee=0x3837ab8,
LParenLoc=..., Args=..., RParenLoc=...,
ExecConfig=0x0)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:1833<br>
#19 0x00007ffff5975f26 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCallExpr
(this=0x7fffffff2738, E=0x8d8a08) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:7617<br>
#20 0x00007ffff5967982 in (anonymous
namespace)::TemplateInstantiator::TransformCallExpr
(this=0x7fffffff2738, CE=0x8d8a08) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:823<br>
#21 0x00007ffff595e10a in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr
(this=0x7fffffff2738, E=0x8d8a08) at
tools/clang/include/clang/AST/StmtNodes.inc:299<br>
#22 0x00007ffff597fbb2 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDecltypeType
(this=0x7fffffff2738, TLB=..., TL=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:4922<br>
#23 0x00007ffff5954aa6 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType
(this=0x7fffffff2738, TLB=..., T=...) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/AST/TypeNodes.def:88<br>
#24 0x00007ffff59539bf in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType
(this=0x7fffffff2738, DI=0x8d8aa8) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3706<br>
#25 0x00007ffff597404d in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateArgument
(this=0x7fffffff2738, Input=..., Output=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3441<br>
#26 0x00007ffff597332a in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLocContainerIterator<clang::TemplateSpecializationTypeLoc>
> (this=0x7fffffff2738, <br>
First=..., Last=..., Outputs=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3661<br>
#27 0x00007ffff5971f79 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateSpecializationType
(this=0x7fffffff2738, TLB=..., TL=...,
Template=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5213<br>
#28 0x00007ffff5971c34 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTSIInObjectScope
(this=0x7fffffff2738, TL=..., ObjectType=...,
UnqualLookup=0x0, SS=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3854<br>
#29 0x00007ffff5990278 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTypeInObjectScope
(this=0x7fffffff2738, TL=..., ObjectType=...,
UnqualLookup=0x0, SS=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3813<br>
#30 0x00007ffff59604c8 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformNestedNameSpecifierLoc
(this=0x7fffffff2738, NNS=..., ObjectType=...,
FirstQualifierInScope=0x0)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3189<br>
#31 0x00007ffff59817be in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDependentNameType
(this=0x7fffffff2738, TLB=..., TL=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5434<br>
#32 0x00007ffff5954f1a in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType
(this=0x7fffffff2738, TLB=..., T=...) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/AST/TypeNodes.def:101<br>
#33 0x00007ffff59539bf in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType
(this=0x7fffffff2738, DI=0x8d8cc0) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3706<br>
#34 0x00007ffff59537ff in
clang::Sema::SubstType (this=0x6b6e00,
T=0x8d8cc0, Args=..., Loc=..., Entity=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1472<br>
#35 0x00007ffff59581e7 in
clang::Sema::SubstBaseSpecifiers
(this=0x6b6e00, Instantiation=0x3837850,
Pattern=0x8d8440, TemplateArgs=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1810<br>
#36 0x00007ffff5958675 in
clang::Sema::InstantiateClass (this=0x6b6e00,
PointOfInstantiation=...,
Instantiation=0x3837850, Pattern=0x8d8440,
TemplateArgs=...,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971<br>
#37 0x00007ffff595a361 in
clang::Sema::InstantiateClassTemplateSpecialization
(this=0x6b6e00, PointOfInstantiation=...,
ClassTemplateSpec=0x3837850,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427<br>
#38 0x00007ffff5a157c1 in
clang::Sema::RequireCompleteTypeImpl
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290<br>
#39 0x00007ffff5a150f6 in
clang::Sema::RequireCompleteType
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117<br>
#40 0x00007ffff52aa25a in
clang::Sema::RequireCompleteType<clang::SourceRange>
(this=0x6b6e00, Loc=..., T=..., DiagID=2256,
Args=...) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303<br>
#41 0x00007ffff53ff108 in
clang::Sema::CheckBaseSpecifier
(this=0x6b6e00, Class=0x38362d8,
SpecifierRange=..., Virtual=false,
Access=clang::AS_public, TInfo=0x38379e0,
EllipsisLoc=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp:1454<br>
#42 0x00007ffff595828a in
clang::Sema::SubstBaseSpecifiers
(this=0x6b6e00, Instantiation=0x38362d8,
Pattern=0x8d94d8, TemplateArgs=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1822<br>
#43 0x00007ffff5958675 in
clang::Sema::InstantiateClass (this=0x6b6e00,
PointOfInstantiation=...,
Instantiation=0x38362d8, Pattern=0x8d94d8,
TemplateArgs=...,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971<br>
#44 0x00007ffff595a361 in
clang::Sema::InstantiateClassTemplateSpecialization
(this=0x6b6e00, PointOfInstantiation=...,
ClassTemplateSpec=0x38362d8,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427<br>
#45 0x00007ffff5a157c1 in
clang::Sema::RequireCompleteTypeImpl
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290<br>
#46 0x00007ffff5a150f6 in
clang::Sema::RequireCompleteType
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117<br>
#47 0x00007ffff52aa25a in
clang::Sema::RequireCompleteType<clang::SourceRange>
(this=0x6b6e00, Loc=..., T=..., DiagID=2259,
Args=...) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303<br>
#48 0x00007ffff52a5c38 in
clang::Sema::RequireCompleteDeclContext
(this=0x6b6e00, SS=..., DC=0x3836310) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaCXXScopeSpec.cpp:212<br>
#49 0x00007ffff552c8ec in
clang::Sema::BuildQualifiedDeclarationNameExpr
(this=0x6b6e00, SS=..., NameInfo=...,
IsAddressOfOperand=false, RecoveryTSI=0x0) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:2294<br>
#50 0x00007ffff5976d14 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::RebuildDependentScopeDeclRefExpr
(this=0x7fffffff75b8, QualifierLoc=...,
TemplateKWLoc=..., NameInfo=...,
TemplateArgs=0x0, <br>
IsAddressOfOperand=false, RecoveryTSI=0x0)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:2402<br>
#51 0x00007ffff5976ac0 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr
(this=0x7fffffff75b8, E=0x7d1a50,
IsAddressOfOperand=false, RecoveryTSI=0x0)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8997<br>
#52 0x00007ffff5969433 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr
(this=0x7fffffff75b8, E=0x7d1a50)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8963<br>
#53 0x00007ffff595e47c in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr
(this=0x7fffffff75b8, E=0x7d1a50) at
tools/clang/include/clang/AST/StmtNodes.inc:433<br>
#54 0x00007ffff59743e4 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateArgument
(this=0x7fffffff75b8, Input=..., Output=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3480<br>
#55 0x00007ffff597332a in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLocContainerIterator<clang::TemplateSpecializationTypeLoc>
> (this=0x7fffffff75b8, <br>
First=..., Last=..., Outputs=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3661<br>
#56 0x00007ffff5971f79 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateSpecializationType
(this=0x7fffffff75b8, TLB=..., TL=...,
Template=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5213<br>
#57 0x00007ffff598143b in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateSpecializationType
(this=0x7fffffff75b8, TLB=..., TL=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5112<br>
#58 0x00007ffff5954dfd in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType
(this=0x7fffffff75b8, TLB=..., T=...) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/AST/TypeNodes.def:98<br>
#59 0x00007ffff59539bf in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType
(this=0x7fffffff75b8, DI=0x7d1c48) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3706<br>
#60 0x00007ffff59537ff in
clang::Sema::SubstType (this=0x6b6e00,
T=0x7d1c48, Args=..., Loc=..., Entity=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1472<br>
#61 0x00007ffff59581e7 in
clang::Sema::SubstBaseSpecifiers
(this=0x6b6e00, Instantiation=0x3836030,
Pattern=0x7d1578, TemplateArgs=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1810<br>
#62 0x00007ffff5958675 in
clang::Sema::InstantiateClass (this=0x6b6e00,
PointOfInstantiation=...,
Instantiation=0x3836030, Pattern=0x7d1578,
TemplateArgs=...,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971<br>
#63 0x00007ffff595a361 in
clang::Sema::InstantiateClassTemplateSpecialization
(this=0x6b6e00, PointOfInstantiation=...,
ClassTemplateSpec=0x3836030,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427<br>
#64 0x00007ffff5a157c1 in
clang::Sema::RequireCompleteTypeImpl
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290<br>
#65 0x00007ffff5a150f6 in
clang::Sema::RequireCompleteType
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117<br>
#66 0x00007ffff52aa25a in
clang::Sema::RequireCompleteType<clang::SourceRange>
(this=0x6b6e00, Loc=..., T=..., DiagID=2256,
Args=...) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303<br>
#67 0x00007ffff53ff108 in
clang::Sema::CheckBaseSpecifier
(this=0x6b6e00, Class=0x3835810,
SpecifierRange=..., Virtual=false,
Access=clang::AS_public, TInfo=0x38361b0,
EllipsisLoc=...)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp:1454<br>
#68 0x00007ffff595828a in
clang::Sema::SubstBaseSpecifiers
(this=0x6b6e00, Instantiation=0x3835810,
Pattern=0x7d1e20, TemplateArgs=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1822<br>
#69 0x00007ffff5958675 in
clang::Sema::InstantiateClass (this=0x6b6e00,
PointOfInstantiation=...,
Instantiation=0x3835810, Pattern=0x7d1e20,
TemplateArgs=...,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971<br>
#70 0x00007ffff595a361 in
clang::Sema::InstantiateClassTemplateSpecialization
(this=0x6b6e00, PointOfInstantiation=...,
ClassTemplateSpec=0x3835810,
TSK=clang::TSK_ImplicitInstantiation,
Complain=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427<br>
#71 0x00007ffff5a157c1 in
clang::Sema::RequireCompleteTypeImpl
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290<br>
#72 0x00007ffff5a150f6 in
clang::Sema::RequireCompleteType
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117<br>
#73 0x00007ffff52aa25a in
clang::Sema::RequireCompleteType<clang::SourceRange>
(this=0x6b6e00, Loc=..., T=..., DiagID=2259,
Args=...) at
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303<br>
#74 0x00007ffff52a5c38 in
clang::Sema::RequireCompleteDeclContext
(this=0x6b6e00, SS=..., DC=0x3835848) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaCXXScopeSpec.cpp:212<br>
#75 0x00007ffff552c8ec in
clang::Sema::BuildQualifiedDeclarationNameExpr
(this=0x6b6e00, SS=..., NameInfo=...,
IsAddressOfOperand=false, RecoveryTSI=0x0) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:2294<br>
#76 0x00007ffff5976d14 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::RebuildDependentScopeDeclRefExpr
(this=0x7fffffffbac8, QualifierLoc=...,
TemplateKWLoc=..., NameInfo=...,
TemplateArgs=0x0, <br>
IsAddressOfOperand=false, RecoveryTSI=0x0)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:2402<br>
#77 0x00007ffff5976ac0 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr
(this=0x7fffffffbac8, E=0x9a8628,
IsAddressOfOperand=false, RecoveryTSI=0x0)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8997<br>
#78 0x00007ffff5969433 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr
(this=0x7fffffffbac8, E=0x9a8628)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8963<br>
#79 0x00007ffff595e47c in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr
(this=0x7fffffffbac8, E=0x9a8628) at
tools/clang/include/clang/AST/StmtNodes.inc:433<br>
#80 0x00007ffff596339c in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformBinaryOperator
(this=0x7fffffffbac8, E=0x9a8818) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:7704<br>
#81 0x00007ffff595dca3 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr
(this=0x7fffffffbac8, E=0x9a8818) at
tools/clang/include/clang/AST/StmtNodes.inc:157<br>
#82 0x00007ffff5955af2 in
clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExceptionSpec
(this=0x7fffffffbac8, Loc=..., ESI=...,
Exceptions=..., Changed=@0x7fffffffba7f:
false)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:4697<br>
#83 0x00007ffff59559ea in
clang::Sema::SubstExceptionSpec
(this=0x6b6e00, New=0x7ffff0b023a8,
Proto=0x9a8840, Args=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1611<br>
#84 0x00007ffff59aca2b in
clang::Sema::InstantiateExceptionSpec
(this=0x6b6e00, PointOfInstantiation=...,
Decl=0x7ffff0b023a8) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:3193<br>
#85 0x00007ffff5518b88 in
clang::Sema::ResolveExceptionSpec
(this=0x6b6e00, Loc=..., FPT=0x7ffff0b02470)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExceptionSpec.cpp:162<br>
#86 0x00007ffff53839f5 in
clang::Sema::ActOnStartOfFunctionDef
(this=0x6b6e00, FnBodyScope=0x0,
D=0x7ffff0b023a8) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDecl.cpp:10475<br>
#87 0x00007ffff59ad779 in
clang::Sema::InstantiateFunctionDefinition
(this=0x6b6e00, PointOfInstantiation=...,
Function=0x7ffff0b023a8, Recursive=true,
DefinitionRequired=true)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:3449<br>
#88 0x0000000000428f79 in
QuaffVisitor::CanBeSafeToHandle
(this=0x694b30, d=0x7ffff0b023a8,
inInstantiation=true) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/quaff-visitor.cc:179<br>
#89 0x000000000042a46f in
QuaffVisitor::VisitCXXMethod (this=0x694b30,
d=0x7ffff0b023a8, instantiation=true) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/quaff-visitor.cc:388<br>
#90 0x000000000040dd50 in Walker::Traverse
(this=0x694c40, d=0x7ffff0b023a8) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:64<br>
#91 0x000000000040e28d in
Walker::TraverseCXXRecord (this=0x694c40,
d=0x7ffff0bf1218) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:96<br>
#92 0x000000000040df33 in
Walker::TraverseClassTemplate (this=0x694c40,
d=0x96d750) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:109<br>
#93 0x000000000040dbce in Walker::Traverse
(this=0x694c40, d=0x96d750) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:45<br>
#94 0x000000000040e0b2 in
Walker::TraverseNamespace (this=0x694c40,
d=0x95ea20) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:119<br>
#95 0x000000000040dc25 in Walker::Traverse
(this=0x694c40, d=0x95ea20) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:51<br>
#96 0x000000000040e0b2 in
Walker::TraverseNamespace (this=0x694c40,
d=0x95e9b8) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:119<br>
#97 0x000000000040dc25 in Walker::Traverse
(this=0x694c40, d=0x95e9b8) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:51<br>
#98 0x000000000040d8d2 in
Walker::TraverseTranslationUnit
(this=0x694c40, d=0x693bd0) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:17<br>
#99 0x000000000040d054 in Consumer<Options,
QuaffVisitor>::HandleTranslationUnit
(this=0x694b20, context=...) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/consumer.hh:21<br>
#100 0x00007ffff1f9dab6 in clang::ParseAST
(S=..., PrintStats=false,
SkipFunctionBodies=false) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Parse/ParseAST.cpp:151<br>
#101 0x00007ffff610824f in
clang::ASTFrontendAction::ExecuteAction
(this=0x660f50) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:536<br>
#102 0x00007ffff6107d50 in
clang::FrontendAction::Execute (this=0x660f50)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:439<br>
#103 0x00007ffff60b4f5f in
clang::CompilerInstance::ExecuteAction
(this=0x7fffffffd368, Act=...) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:814<br>
#104 0x00007ffff77bca6e in
clang::tooling::FrontendActionFactory::runInvocation
(this=0x7fffffffde88, Invocation=0x6612a0,
Files=0x65f4f0, DiagConsumer=0x0) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:272<br>
#105 0x00007ffff77bc979 in
clang::tooling::ToolInvocation::runInvocation
(this=0x7fffffffdb80, BinaryName=0x65fec8
"/home/peter/Programming/llvm/clang/bin/quaff",
Compilation=0x65aae0, Invocation=0x6612a0)<br>
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:249<br>
#106 0x00007ffff77bc211 in
clang::tooling::ToolInvocation::run
(this=0x7fffffffdb80) at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:235<br>
#107 0x00007ffff77bd3aa in
clang::tooling::ClangTool::run
(this=0x7fffffffdea8, Action=0x7fffffffde88)
at
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:364<br>
#108 0x000000000040873d in main (argc=5,
argv=0x7fffffffe178) at
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/main.cc:149<br>
<br>
<br>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
cfe-dev mailing list
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
cfe-dev mailing list
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
cfe-dev mailing list
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
</div>
</div>
</div>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br></div></div>