[cfe-dev] <vector> parse but cannot be instanciated
Cédric Venet
cedric.venet at laposte.net
Wed Sep 16 09:13:31 PDT 2009
>
>> (note that I am using clang on windows with the mingw 3.4.5 headers
>> and that the define __declspec is needed. perhaps it should be added
>> to the predefined macro? as clang support the dllimport attribute)
>
> We have some support for parsing __declspec already, but I'm sure that
> we're missing it when parsing some C++ constructs. What kinds of
> problems are you seeing with __declspec?
It is mingw specific and not a problem on declspec. In _mingw.h, there is:
#ifndef __GNUC__
# ifndef __MINGW_IMPORT
# define __MINGW_IMPORT __declspec(dllimport)
# endif
# ifndef _CRTIMP
# define _CRTIMP __declspec(dllimport)
# endif
# define __DECLSPEC_SUPPORTED
# define __attribute__(x) /* nothing */
#else /* __GNUC__ */
# ifdef __declspec
# ifndef __MINGW_IMPORT
/* Note the extern. This is needed to work around GCC's
limitations in handling dllimport attribute. */
# define __MINGW_IMPORT extern __attribute__ ((__dllimport__))
# endif
# ifndef _CRTIMP
# ifdef __USE_CRTIMP
# define _CRTIMP __attribute__ ((dllimport))
# else
# define _CRTIMP
# endif
# endif
# define __DECLSPEC_SUPPORTED
# else /* __declspec */
# undef __DECLSPEC_SUPPORTED
# undef __MINGW_IMPORT
# ifndef _CRTIMP
# define _CRTIMP
# endif
# endif /* __declspec */
and if __MINGW_IMPORT is not defined, there is problems latter in the
compilation (in time.h for exemple).
So when you have __GNUC__ defined, you have to have __declspec defined,
else it does not work. Anyway putting a define __declspec allowed me to
parse this, even if it is a big hack)
(in fact if __MSVCRT__ can be undefined, __MINGW_IMPORT should not be
used...)
>
>> now, the instanciation of the vector assert:
>>
>> Assertion failed: false && "Unable to find declaration for the
>> current instantiation", file
>> ..\..\..\..\..\tools\clang\lib\Sema\SemaTemplateInstantiateDecl.cpp,
>> line 1411
>
> FWIW, this is coming from an attempt to instantiate a default argument
> expression in a template (that refers to a typedef), e.g.,
I see, thanks for the explanation. I must say I am eager to have good
c++ semantic analyse working to be able to use clang for static analysis
and inteligent refactoring, but I know the task is daunting so I am
waiting. Sadly I don't have enough times to contribute (need to finish
my phd first). just following the project is already quite time consuming :)
regards,
Cédric
More information about the cfe-dev
mailing list