[LLVMdev] RFC: Replacing publicly accessible class IDs with getters

陳韋任 (Wei-Ren Chen) chenwj at iis.sinica.edu.tw
Thu Jan 31 19:07:37 PST 2013


On Wed, Jan 30, 2013 at 12:02:47PM -0600, Matthew Curtis wrote:
> Hello all,
> 
> In the process of porting the Polly plug-in to Windows we encountered a couple
> of issues stemming from the use (within Polly) of global data from LLVM.
> 
> By far the most common occurrence of this is the definition by a class of a
> publicly accessible static ID, the address of which is used to uniquely
> identify the class. For example
> 
>     class AliasAnalysis {
> 
>     public:
>       static char ID; // Class identification, replacement for typeinfo
> 
>     };
> 
> 
> This turns out to be problematic on Windows for two reasons:
> 
> 1) We found that Visual Studio actually defines two copies of the ID, one
> within the clang executable and another within the Polly library. This results
> in Polly being unable to identify LLVM passes. (This seems like a bug in Visual
> Studio, but we could not find a resolution other than changing LLVM as noted
> below).
> 2) We chose to use delay loading for symbols imported by Polly from clang. This
> allows the Polly dll to be loaded into any executable that provides the
> required symbols. However delay loading precludes the importing of data[1].
> 
> We would like to resolve these issues by replacing public access of the ID with
> a getter:
> 
>     class AliasAnalysis {
> 
>     private:
>       static char ID; // Class identification, replacement for typeinfo
> 
>     public:
>       static const void *getClassPassID();
>     };

  I think that would be O.K., but why getClassPassID return "const void
*" not just "char"?

Regards,
chenwj

-- 
Wei-Ren Chen (陳韋任)
Computer Systems Lab, Institute of Information Science,
Academia Sinica, Taiwan (R.O.C.)
Tel:886-2-2788-3799 #1667
Homepage: http://people.cs.nctu.edu.tw/~chenwj




More information about the llvm-dev mailing list