[GCC-XML] EXTERNAL: Re: error: unable to emulate 'TI'
Davidson, Josh
josh.davidson at lmco.com
Mon Nov 7 17:24:07 EST 2011
Brad,
Thanks that did clear up the error. I did run into another oddity though, which I swear was working before. When I attempt to run gccxml against a header file (courtesy of Py++), the gcc parser fails regardless if I'm using the MinGW or Cygwin build of gccxml. Now, if I #include the header file in a simple C++ file, it works just fine.
------------------------Output------------------------------------------
C:\scratch>gccxml hello_world.hpp
gccxml_cc1plus.exe: internal compiler error: in c_common_valid_pch, at c-pch.c:2
39
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
-------------------------hello_world.hpp-----------------------------------
// Copyright 2004-2006 Roman Yakovenko.
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef __hello_world_hpp__
#define __hello_world_hpp__
#include <string>
//I want to rename color to Color
enum color{ red, green, blue };
struct genealogical_tree{/*...*/};
struct animal{
explicit animal( const std::string& name="" )
: m_name( name )
{}
//I need to set call policies to the function
genealogical_tree& genealogical_tree_ref()
{ return m_genealogical_tree; }
std::string name() const
{ return m_name; }
private:
std::string m_name;
genealogical_tree m_genealogical_tree;
};
//I want to exclude next declarations:
struct impl1{};
struct impl2{};
inline int* get_int_ptr(){ return 0;}
inline int* get_int_ptr(int){ return 0;}
inline int* get_int_ptr(double){ return 0;}
#endif//__hello_world_hpp__
-------------------------------Working test.cpp---------------------------------
#include "hello_world.hpp"
int blah() {
int e;
return 0;
}
-----Original Message-----
From: Brad King [mailto:brad.king at kitware.com]
Sent: Monday, November 07, 2011 2:36 PM
To: Davidson, Josh
Cc: gccxml at gccxml.org
Subject: EXTERNAL: Re: [GCC-XML] error: unable to emulate 'TI'
On 11/7/2011 2:14 PM, Davidson, Josh wrote:
> Just a little background...I'm using gccxml for Linux, Cygwin, and MinGW.
> I know MinGW isn't officially supported (or at least didn't use to be),
> but I've had no issues thus far with it. That is, until I attempted to
> get a 64-bit version working. I was able to get gccxml built, but when
> I run, I get the following error:
>
> C:\Users\davidsj2\scratch>gccxml test.cpp
> test.cpp:1: error: unable to emulate 'TI'
> c:/mingw64-i686-20110207/lib/gcc/../../x86_64-w64-mingw32/include/_mingw.h:194: error: unable to emulate 'TI'
I think this is because gccxml uses a GCC 4.2 parser internally that is
compiled for a 32-bit target. It does not know how to handle the
__mode__(TI) attribute it sees in the MinGW header when preprocessed
for a 64-bit build. I can produce the same error outside of gccxml
using just GCC for 32-bit MinGW:
$ cat test.c
typedef int int128 __attribute__ ((__mode__ (TI)));
$ gcc --version
gcc.exe (GCC) 4.5.2
$ gcc -c test.c
test.c:1:1: error: unable to emulate 'TI'
Since gccxml is interested only in the interface and not in the ABI
you may be able to work around the error by adding "-D__mode__(x)="
to the command line. It works for the above error:
$ gcc -c test.c "-D__mode__(x)="
-Brad
More information about the gccxml
mailing list