Fix some warnings.

Remove the dependency on <typeinfo> containing the vtable layout for
std::type_info.  This allows libobjc2 to be built against libc++ and libcxxrt
and still provide working a unified exception model.

Note: This is broken on FreeBSD < 9.1, because it ships a libsupc++ with a
broken ABI.
main
theraven 14 years ago
parent 3df479e899
commit 26784adc0a

@ -14,6 +14,7 @@ LIBOBJCXX=libobjcxx
SILENT=@
CFLAGS += -std=gnu99 -fPIC -fexceptions
CFLAGS += -Wno-deprecated-objc-isa-usage
CXXFLAGS += -fPIC -fexceptions
CPPFLAGS += -DTYPE_DEPENDENT_DISPATCH -DGNUSTEP
CPPFLAGS += -D__OBJC_RUNTIME_INTERNAL__=1 -D_XOPEN_SOURCE=500 -D__BSD_VISIBLE=1 -D_BSD_SOURCE=1

@ -143,7 +143,7 @@ static uint64_t read_value(char encoding, unsigned char **data)
{
enum dwarf_data_encoding type = get_encoding(encoding);
uint64_t v;
switch (type)
switch ((int)type)
{
// Read fixed-length types
#define READ(dwarf, type) \

@ -1,14 +1,53 @@
#include <stdlib.h>
#include <stdio.h>
#include "dwarf_eh.h"
#include <typeinfo>
#include <exception>
#include "objcxx_eh.h"
#include <exception>
extern "C"
{
#include "objc/runtime.h"
};
namespace __cxxabiv1
{
struct __class_type_info;
}
using __cxxabiv1::__class_type_info;
namespace std
{
/**
* std::type_info defined with the GCC ABI. This may not be exposed in
* public headers, but is required for correctly implementing the unified
* exception model.
*/
class type_info
{
public:
virtual ~type_info();
bool operator==(const type_info &) const;
bool operator!=(const type_info &) const;
bool before(const type_info &) const;
const char* name() const;
type_info();
private:
type_info(const type_info& rhs);
type_info& operator= (const type_info& rhs);
const char *__type_name;
protected:
type_info(const char *name): __type_name(name) { }
public:
virtual bool __is_pointer_p() const;
virtual bool __is_function_p() const;
virtual bool __do_catch(const type_info *thrown_type,
void **thrown_object,
unsigned outer) const;
virtual bool __do_upcast(
const __class_type_info *target,
void **thrown_object) const;
};
}
using namespace std;

Loading…
Cancel
Save