Mercurial > projects > ldc
view gen/logger.cpp @ 1346:6f4154b318ef
Remove an old workaround that was kept around for ABI-compatibility on x86-64
between different LLVM versions.
This means LLVM r67588 is required if you want to compile for x86-64, otherwise
the backend will assert when you try to return e.g. struct { int i; char c; }
from a function. (In particular, this is no longer compatible with LLVM 2.5)
It also means that any code returning small structs on x86-64 will probably
need to be recompiled in order to be linkable to code compiled with this change.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Tue, 12 May 2009 15:50:48 +0200 |
parents | e7f0c2b48047 |
children | 2292878925f4 |
line wrap: on
line source
#include <cassert> #include <cstdarg> #include <cstdio> #include <cstdlib> #include <fstream> #include <string> #include "mars.h" #include "llvm/Support/CommandLine.h" #include "gen/logger.h" namespace Logger { static std::string indent_str; llvm::cl::opt<bool> _enabled("vv", llvm::cl::desc("Very verbose"), llvm::cl::ZeroOrMore); void indent() { if (_enabled) { indent_str += "* "; } } void undent() { if (_enabled) { assert(!indent_str.empty()); indent_str.resize(indent_str.size()-2); } } llvm::OStream cout() { if (_enabled) return llvm::cout << indent_str; else return 0; } void println(const char* fmt,...) { if (_enabled) { printf("%s", indent_str.c_str()); va_list va; va_start(va,fmt); vprintf(fmt,va); va_end(va); printf("\n"); } } void print(const char* fmt,...) { if (_enabled) { printf("%s", indent_str.c_str()); va_list va; va_start(va,fmt); vprintf(fmt,va); va_end(va); } } void enable() { _enabled = true; } void disable() { _enabled = false; } bool enabled() { return _enabled; } void attention(Loc loc, const char* fmt,...) { va_list va; va_start(va,fmt); vwarning(loc,fmt,va); va_end(va); } }