Skip to content

Commit

Permalink
Fix some warnings.
Browse files Browse the repository at this point in the history
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.



git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/libobjc2/trunk@34993 72102866-910b-0410-8b05-ffd578937521
  • Loading branch information
theraven committed Mar 24, 2012
1 parent d7b8d8d commit 5ebf87c
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 3 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion dwarf_eh.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) \
Expand Down
43 changes: 41 additions & 2 deletions objcxx_eh.cc
Original file line number Diff line number Diff line change
@@ -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;

Expand Down

0 comments on commit 5ebf87c

Please sign in to comment.