[llvm-commits] CVS: llvm/lib/CodeGen/LiveInterval.cpp MachineBasicBlock.cpp MachineInstr.cpp

Jeff Cohen jeffc at jolt-lang.org
Fri Dec 15 18:11:49 PST 2006


I got it to work... I'll be committing shortly.  I'm not sure what the 
problem was, but it seems to have something to do with resolving the 
overload of operator<< and almost certainly is a VC++ bug.  It won't 
accept a forward declared type when it ought to.

Chris Lattner wrote:
>
> On Dec 15, 2006, at 3:58 PM, Jeff Cohen wrote:
>
>> I'll look into making this change.
>>
>> Part of the problem is that VC++ doesn't like *OS.stream() in a header
>> file when <ostream> isn't included, even if the declaration of
>> std::basic_ostream shouldn't be needed (but doesn't have a problem with
>> it in a .cpp file, probably because it isn't inlined then).  This would
>> appear to be a bug, but it also constrains my options.
>>
>> I could also just undo the change and go back to including <ostream> in
>> the header files.  Gcc must be doing it implicitly anyway, as that's the
>> only way some of that code can compile (which does need the declaration
>> of std::basic_ostream).
>
> If *OS.stream() isn't working, it seems likely that LLVMStream.h isn't 
> getting #included.  Alternatively, perhaps <iosfwd> isn't?
>
> -Chris
>
>>
>> Bill Wendling wrote:
>>> That's reasonable. So then a better solution would be to keep
>>> everything in the .h file, but change operator<<(OStream&) to call the
>>> "print()" function directly. So something like this:
>>>
>>> #include <iosfwd>
>>>
>>> // ...
>>>
>>> OStream& operator<<(OStream &OS, const MachineBasicBlock &MBB) {
>>>   if (*OS.stream()) MBB->print(*OS.stream());
>>>   return OS;
>>> }
>>>
>>> I'm still working on a nice way of implementing something like this:
>>>
>>> template <typename StreamTy>
>>> class BaseStream {
>>>   StreamTy *stream;
>>> public:
>>>   operator StreamTy () { return *stream; }
>>> };
>>>
>>> but I'm having problems figuring out the "null" stream semantics
>>> (right now, it uses "stream = 0" as an indication that it's "null").
>>> But the above hack should suffice in the meantime.
>>>
>>> -bw
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
>




More information about the llvm-commits mailing list