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

Chris Lattner clattner at apple.com
Fri Dec 15 18:04:36 PST 2006


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