llvm.org GIT mirror llvm / 8b70b78
Fixes for PR114: Thanks to Reid Spencer! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10029 91177308-0d34-0410-b5e6-96231b3b80d8 Chris Lattner 16 years ago
28 changed file(s) with 112 addition(s) and 85 deletion(s). Raw diff Collapse all Expand all
3636 template struct simplify_type {
3737 typedef const From SimpleType;
3838 static SimpleType &getSimplifiedValue(const From &Val) {
39 return simplify_type::getSimplifiedValue((From&)Val);
39 return simplify_type::getSimplifiedValue(static_cast(Val));
4040 }
4141 };
4242
177177 template struct cast_convert_val {
178178 // This _is_ a simple type, just cast it.
179179 static typename cast_retty::ret_type doit(const FromTy &Val) {
180 return (typename cast_retty::ret_type)Val;
180 return reinterpret_cast::ret_type>(
181 const_cast(Val));
181182 }
182183 };
183184
147147
148148 inline enum NumOccurrences getNumOccurrencesFlag() const {
149149 int NO = Flags & OccurrencesMask;
150 return NO ? (enum NumOccurrences)NO : getNumOccurrencesFlagDefault();
150 return NO ? static_cast(NO)
151 : getNumOccurrencesFlagDefault();
151152 }
152153 inline enum ValueExpected getValueExpectedFlag() const {
153154 int VE = Flags & ValueMask;
154 return VE ? (enum ValueExpected)VE : getValueExpectedFlagDefault();
155 return VE ? static_cast(VE)
156 : getValueExpectedFlagDefault();
155157 }
156158 inline enum OptionHidden getOptionHiddenFlag() const {
157159 int OH = Flags & HiddenMask;
158 return OH ? (enum OptionHidden)OH : getOptionHiddenFlagDefault();
160 return OH ? static_cast(OH)
161 : getOptionHiddenFlagDefault();
159162 }
160163 inline enum FormattingFlags getFormattingFlag() const {
161164 int OH = Flags & FormattingMask;
162 return OH ? (enum FormattingFlags)OH : getFormattingFlagDefault();
165 return OH ? static_cast(OH)
166 : getFormattingFlagDefault();
163167 }
164168 inline unsigned getMiscFlags() const {
165169 return Flags & MiscMask;
306310
307311 // Process the varargs portion of the values...
308312 while (const char *EnumName = va_arg(ValueArgs, const char *)) {
309 DataType EnumVal = (DataType)va_arg(ValueArgs, int);
313 DataType EnumVal = static_cast(va_arg(ValueArgs, int));
310314 const char *EnumDesc = va_arg(ValueArgs, const char *);
311315 Values.push_back(std::make_pair(EnumName, // Add value to value map
312316 std::make_pair(EnumVal, EnumDesc)));
451455 template
452456 void addLiteralOption(const char *Name, const DT &V, const char *HelpStr) {
453457 assert(findOption(Name) == Values.size() && "Option already exists!");
454 Values.push_back(std::make_pair(Name, std::make_pair((DataType)V,HelpStr)));
458 Values.push_back(std::make_pair(Name,
459 std::make_pair(static_cast(V),HelpStr)));
455460 }
456461
457462 // removeLiteralOption - Remove the specified option.
9999 void writeNode(NodeType *Node) {
100100 std::string NodeAttributes = DOTTraits::getNodeAttributes(Node);
101101
102 O << "\tNode" << (void*)Node << " [shape=record,";
102 O << "\tNode" << reinterpret_cast(Node) << " [shape=record,";
103103 if (!NodeAttributes.empty()) O << NodeAttributes << ",";
104104 O << "label=\"{"
105105 << DOT::EscapeString(DOTTraits::getNodeLabel(Node, G));
136136 // Figure out which edge this targets...
137137 unsigned Offset = std::distance(GTraits::child_begin(TargetNode),
138138 TargetIt);
139 DestPort = (int)Offset;
140 }
141
142 emitEdge((void *)Node, edgeidx, (void*)TargetNode, DestPort,
139 DestPort = static_cast(Offset);
140 }
141
142 emitEdge(reinterpret_cast(Node), edgeidx,
143 reinterpret_cast(TargetNode), DestPort,
143144 DOTTraits::getEdgeAttributes(Node, EI));
144145 }
145146 }
177178 O << "\tNode" << SrcNodeID;
178179 if (SrcNodePort >= 0)
179180 O << ":g" << SrcNodePort;
180 O << " -> Node" << (void*)DestNodeID;
181 O << " -> Node" << reinterpret_cast(DestNodeID);
181182 if (DestNodePort >= 0)
182183 O << ":g" << DestNodePort;
183184
3030
3131 // Provide a hash function for arbitrary pointers...
3232 template struct hash {
33 inline size_t operator()(const T *Val) const { return (size_t)Val; }
33 inline size_t operator()(const T *Val) const {
34 return reinterpret_cast(Val);
35 }
3436 };
3537
3638 } // End namespace std
4646 size_type max_size() const { return ~0 / sizeof(T); }
4747
4848 static pointer allocate(size_t n, void* hint = 0) {
49 return (pointer)malloc(n*sizeof(T));
49 return static_cast(malloc(n*sizeof(T)));
5050 }
5151
5252 static void deallocate(pointer p, size_t n) {
53 free((void*)p);
53 free(static_cast(p));
5454 }
5555
5656 void construct(pointer p, const T &val) {
57 new((void*)p) T(val);
57 new(static_cast(p)) T(val);
5858 }
5959 void destroy(pointer p) {
6060 p->~T();
2727 inline bool isPowerOf2(int64_t C, unsigned &getPow) {
2828 if (C < 0) C = -C;
2929 if (C > 0 && C == (C & ~(C - 1))) {
30 getPow = log2((uint64_t)C);
30 getPow = log2(static_cast(C));
3131 return true;
3232 }
3333
5656
5757 static inline std::string itostr(int64_t X) {
5858 if (X < 0)
59 return utostr((uint64_t)-X, true);
59 return utostr(static_cast(-X), true);
6060 else
61 return utostr((uint64_t)X);
61 return utostr(static_cast(X));
6262 }
6363
6464
6565 static inline std::string utostr(unsigned long X, bool isNeg = false) {
66 return utostr((unsigned long long)X, isNeg);
66 return utostr(static_cast(X), isNeg);
6767 }
6868
6969 static inline std::string utostr(unsigned X, bool isNeg = false) {
8585
8686 static inline std::string itostr(int X) {
8787 if (X < 0)
88 return utostr((unsigned)-X, true);
88 return utostr(static_cast(-X), true);
8989 else
90 return utostr((unsigned)X);
90 return utostr(static_cast(X));
9191 }
9292
9393 static inline std::string ftostr(double V) {
3030
3131 // Provide a hash function for arbitrary pointers...
3232 template struct hash {
33 inline size_t operator()(const T *Val) const { return (size_t)Val; }
33 inline size_t operator()(const T *Val) const {
34 return reinterpret_cast(Val);
35 }
3436 };
3537
3638 } // End namespace std
5656
5757 static inline std::string itostr(int64_t X) {
5858 if (X < 0)
59 return utostr((uint64_t)-X, true);
59 return utostr(static_cast(-X), true);
6060 else
61 return utostr((uint64_t)X);
61 return utostr(static_cast(X));
6262 }
6363
6464
6565 static inline std::string utostr(unsigned long X, bool isNeg = false) {
66 return utostr((unsigned long long)X, isNeg);
66 return utostr(static_cast(X), isNeg);
6767 }
6868
6969 static inline std::string utostr(unsigned X, bool isNeg = false) {
8585
8686 static inline std::string itostr(int X) {
8787 if (X < 0)
88 return utostr((unsigned)-X, true);
88 return utostr(static_cast(-X), true);
8989 else
90 return utostr((unsigned)X);
90 return utostr(static_cast(X));
9191 }
9292
9393 static inline std::string ftostr(double V) {
112112 case Type::LongTyID: return castToLong(V);
113113 case Type::FloatTyID: return castToFloat(V);
114114 case Type::DoubleTyID: return castToDouble(V);
115 case Type::PointerTyID:return castToPointer(V, (PointerType*)Ty);
115 case Type::PointerTyID:
116 return castToPointer(V, reinterpret_cast(Ty));
116117 default: return 0;
117118 }
118119 }
124125 static inline ConstRules *get(const Constant &V1, const Constant &V2) {
125126 if (isa(V1) || isa(V2))
126127 return getConstantExprRules();
127 return (ConstRules*)V1.getType()->getOrCreateAnnotation(AID);
128 return static_cast(V1.getType()->getOrCreateAnnotation(AID));
128129 }
129130 private:
130131 static ConstRules *getConstantExprRules();
300300 /// which reduces the amount of casting needed in parts of the compiler.
301301 ///
302302 inline const ArrayType *getType() const {
303 return (ArrayType*)Value::getType();
303 return reinterpret_cast(Value::getType());
304304 }
305305
306306 /// getAsString - If the sub-element type of this array is either sbyte or
353353
354354 /// getType() specialization - Reduce amount of casting...
355355 inline const StructType *getType() const {
356 return (StructType*)Value::getType();
356 return reinterpret_cast(Value::getType());
357357 }
358358
359359 /// getValues - Return a vector of the component constants that make up this
393393 class ConstantPointer : public Constant {
394394 ConstantPointer(const ConstantPointer &); // DO NOT IMPLEMENT
395395 protected:
396 inline ConstantPointer(const PointerType *T) : Constant((const Type*)T) {}
396 inline ConstantPointer(const PointerType *T)
397 : Constant(reinterpret_cast(T)) { }
397398 public:
398399 inline const PointerType *getType() const {
399 return (PointerType*)Value::getType();
400 return reinterpret_cast(Value::getType());
400401 }
401402
402403 /// isNullValue - Return true if this is the value that would be returned by
4545
4646 /// getType - Global values are always pointers.
4747 inline const PointerType *getType() const {
48 return (const PointerType*)User::getType();
48 return reinterpret_cast(User::getType());
4949 }
5050
5151 bool hasExternalLinkage() const { return Linkage == ExternalLinkage; }
6969 ///
7070 inline Constant *getInitializer() const {
7171 assert(hasInitializer() && "GV doesn't have initializer!");
72 return (Constant*)Operands[0].get();
72 return reinterpret_cast(Operands[0].get());
7373 }
7474 inline Constant *getInitializer() {
7575 assert(hasInitializer() && "GV doesn't have initializer!");
76 return (Constant*)Operands[0].get();
76 return reinterpret_cast(Operands[0].get());
7777 }
7878 inline void setInitializer(Constant *CPV) {
7979 if (CPV == 0) {
8080 if (hasInitializer()) Operands.pop_back();
8181 } else {
8282 if (!hasInitializer()) Operands.push_back(Use(0, this));
83 Operands[0] = (Value*)CPV;
83 Operands[0] = reinterpret_cast(CPV);
8484 }
8585 }
8686
4949 virtual void setSuccessor(unsigned idx, BasicBlock *B) = 0;
5050
5151 inline BasicBlock *getSuccessor(unsigned idx) {
52 return (BasicBlock*)((const TerminatorInst *)this)->getSuccessor(idx);
52 const TerminatorInst *TI = this;
53 return const_cast(TI->getSuccessor(idx));
5354 }
5455
5556 // Methods for support type inquiry through isa, cast, and dyn_cast:
109110 static Value* getNotArgument( BinaryOperator* Bop);
110111
111112 BinaryOps getOpcode() const {
112 return (BinaryOps)Instruction::getOpcode();
113 return static_cast(Instruction::getOpcode());
113114 }
114115
115116 virtual Instruction *clone() const {
225225 RegisterOpt(const char *PassArg, const char *Name, FunctionPass *(*ctor)(),
226226 bool CFGOnly = false) {
227227 registerPass(new PassInfo(Name, PassArg, typeid(PassName),
228 PassInfo::Optimization, (Pass*(*)())ctor));
228 PassInfo::Optimization,
229 static_cast(ctor)));
229230 if (CFGOnly) setOnlyUsesCFG();
230231 }
231232
245246 bool CFGOnly = false) {
246247 registerPass(new PassInfo(Name, PassArg, typeid(PassName),
247248 PassInfo::Optimization, 0,
248 (Pass*(*)(TargetMachine&))targetctor));
249 static_cast(targetctor)));
249250 if (CFGOnly) setOnlyUsesCFG();
250251 }
251252 };
3636 template struct simplify_type {
3737 typedef const From SimpleType;
3838 static SimpleType &getSimplifiedValue(const From &Val) {
39 return simplify_type::getSimplifiedValue((From&)Val);
39 return simplify_type::getSimplifiedValue(static_cast(Val));
4040 }
4141 };
4242
177177 template struct cast_convert_val {
178178 // This _is_ a simple type, just cast it.
179179 static typename cast_retty::ret_type doit(const FromTy &Val) {
180 return (typename cast_retty::ret_type)Val;
180 return reinterpret_cast::ret_type>(
181 const_cast(Val));
181182 }
182183 };
183184
147147
148148 inline enum NumOccurrences getNumOccurrencesFlag() const {
149149 int NO = Flags & OccurrencesMask;
150 return NO ? (enum NumOccurrences)NO : getNumOccurrencesFlagDefault();
150 return NO ? static_cast(NO)
151 : getNumOccurrencesFlagDefault();
151152 }
152153 inline enum ValueExpected getValueExpectedFlag() const {
153154 int VE = Flags & ValueMask;
154 return VE ? (enum ValueExpected)VE : getValueExpectedFlagDefault();
155 return VE ? static_cast(VE)
156 : getValueExpectedFlagDefault();
155157 }
156158 inline enum OptionHidden getOptionHiddenFlag() const {
157159 int OH = Flags & HiddenMask;
158 return OH ? (enum OptionHidden)OH : getOptionHiddenFlagDefault();
160 return OH ? static_cast(OH)
161 : getOptionHiddenFlagDefault();
159162 }
160163 inline enum FormattingFlags getFormattingFlag() const {
161164 int OH = Flags & FormattingMask;
162 return OH ? (enum FormattingFlags)OH : getFormattingFlagDefault();
165 return OH ? static_cast(OH)
166 : getFormattingFlagDefault();
163167 }
164168 inline unsigned getMiscFlags() const {
165169 return Flags & MiscMask;
306310
307311 // Process the varargs portion of the values...
308312 while (const char *EnumName = va_arg(ValueArgs, const char *)) {
309 DataType EnumVal = (DataType)va_arg(ValueArgs, int);
313 DataType EnumVal = static_cast(va_arg(ValueArgs, int));
310314 const char *EnumDesc = va_arg(ValueArgs, const char *);
311315 Values.push_back(std::make_pair(EnumName, // Add value to value map
312316 std::make_pair(EnumVal, EnumDesc)));
451455 template
452456 void addLiteralOption(const char *Name, const DT &V, const char *HelpStr) {
453457 assert(findOption(Name) == Values.size() && "Option already exists!");
454 Values.push_back(std::make_pair(Name, std::make_pair((DataType)V,HelpStr)));
458 Values.push_back(std::make_pair(Name,
459 std::make_pair(static_cast(V),HelpStr)));
455460 }
456461
457462 // removeLiteralOption - Remove the specified option.
9999 void writeNode(NodeType *Node) {
100100 std::string NodeAttributes = DOTTraits::getNodeAttributes(Node);
101101
102 O << "\tNode" << (void*)Node << " [shape=record,";
102 O << "\tNode" << reinterpret_cast(Node) << " [shape=record,";
103103 if (!NodeAttributes.empty()) O << NodeAttributes << ",";
104104 O << "label=\"{"
105105 << DOT::EscapeString(DOTTraits::getNodeLabel(Node, G));
136136 // Figure out which edge this targets...
137137 unsigned Offset = std::distance(GTraits::child_begin(TargetNode),
138138 TargetIt);
139 DestPort = (int)Offset;
140 }
141
142 emitEdge((void *)Node, edgeidx, (void*)TargetNode, DestPort,
139 DestPort = static_cast(Offset);
140 }
141
142 emitEdge(reinterpret_cast(Node), edgeidx,
143 reinterpret_cast(TargetNode), DestPort,
143144 DOTTraits::getEdgeAttributes(Node, EI));
144145 }
145146 }
177178 O << "\tNode" << SrcNodeID;
178179 if (SrcNodePort >= 0)
179180 O << ":g" << SrcNodePort;
180 O << " -> Node" << (void*)DestNodeID;
181 O << " -> Node" << reinterpret_cast(DestNodeID);
181182 if (DestNodePort >= 0)
182183 O << ":g" << DestNodePort;
183184
4646 size_type max_size() const { return ~0 / sizeof(T); }
4747
4848 static pointer allocate(size_t n, void* hint = 0) {
49 return (pointer)malloc(n*sizeof(T));
49 return static_cast(malloc(n*sizeof(T)));
5050 }
5151
5252 static void deallocate(pointer p, size_t n) {
53 free((void*)p);
53 free(static_cast(p));
5454 }
5555
5656 void construct(pointer p, const T &val) {
57 new((void*)p) T(val);
57 new(static_cast(p)) T(val);
5858 }
5959 void destroy(pointer p) {
6060 p->~T();
2727 inline bool isPowerOf2(int64_t C, unsigned &getPow) {
2828 if (C < 0) C = -C;
2929 if (C > 0 && C == (C & ~(C - 1))) {
30 getPow = log2((uint64_t)C);
30 getPow = log2(static_cast(C));
3131 return true;
3232 }
3333
8282 template<> struct simplify_type {
8383 typedef Value* SimpleType;
8484 static SimpleType getSimplifiedValue(const Use &Val) {
85 return (SimpleType)Val.get();
85 return static_cast(Val.get());
8686 }
8787 };
8888 template<> struct simplify_type {
8989 typedef Value* SimpleType;
9090 static SimpleType getSimplifiedValue(const Use &Val) {
91 return (SimpleType)Val.get();
91 return static_cast(Val.get());
9292 }
9393 };
9494
9595 typedef Value* SimpleType;
9696
9797 static SimpleType getSimplifiedValue(const User::op_iterator &Val) {
98 return (SimpleType)Val->get();
98 return static_cast(Val->get());
9999 }
100100 };
101101 template<> struct simplify_type
105105 typedef Value* SimpleType;
106106
107107 static SimpleType getSimplifiedValue(const User::const_op_iterator &Val) {
108 return (SimpleType)Val->get();
108 return static_cast(Val->get());
109109 }
110110 };
111111 template<> struct simplify_type
4646
4747 // getType - Overload to return most specific pointer type...
4848 inline const PointerType *getType() const {
49 return (const PointerType*)Instruction::getType();
49 return reinterpret_cast(Instruction::getType());
5050 }
5151
5252 // getAllocatedType - Return the type that is being allocated by the
236236
237237 class GetElementPtrInst : public Instruction {
238238 GetElementPtrInst(const GetElementPtrInst &EPI)
239 : Instruction((Type*)EPI.getType(), GetElementPtr) {
239 : Instruction(reinterpret_cast(EPI.getType()), GetElementPtr) {
240240 Operands.reserve(EPI.Operands.size());
241241 for (unsigned i = 0, E = EPI.Operands.size(); i != E; ++i)
242242 Operands.push_back(Use(EPI.Operands[i], this));
248248
249249 // getType - Overload to return most specific pointer type...
250250 inline const PointerType *getType() const {
251 return (PointerType*)Instruction::getType();
251 return reinterpret_cast(Instruction::getType());
252252 }
253253
254254 /// getIndexedType - Returns the type of the element that would be loaded with
112112 Operands.push_back(Use(SA, this));
113113 }
114114
115 OtherOps getOpcode() const { return (OtherOps)Instruction::getOpcode(); }
115 OtherOps getOpcode() const {
116 return static_cast(Instruction::getOpcode());
117 }
116118
117119 virtual Instruction *clone() const { return new ShiftInst(*this); }
118120
5757 /// getIncomingBlock - Return incoming basic block #x
5858 BasicBlock *getIncomingBlock(unsigned i) const {
5959 assert(i*2+1 < Operands.size() && "Invalid value number!");
60 return (BasicBlock*)Operands[i*2+1].get();
60 return reinterpret_cast(Operands[i*2+1].get());
6161 }
6262 void setIncomingBlock(unsigned i, BasicBlock *BB) {
6363 assert(i*2+1 < Operands.size() && "Invalid value number!");
64 Operands[i*2+1] = (Value*)BB;
64 Operands[i*2+1] = reinterpret_cast(BB);
6565 }
6666 unsigned getOperandNumForIncomingBlock(unsigned i) {
6767 return i*2+1;
7272 assert(getType() == D->getType() &&
7373 "All operands to PHI node must be the same type as the PHI node!");
7474 Operands.push_back(Use(D, this));
75 Operands.push_back(Use((Value*)BB, this));
75 Operands.push_back(Use(reinterpret_cast(BB), this));
7676 }
7777
7878 /// removeIncomingValue - Remove an incoming value. This is useful if a
8686 inline bool isConditional() const { return Operands.size() == 3; }
8787
8888 inline Value *getCondition() const {
89 return isUnconditional() ? 0 : (Value*)Operands[2].get();
89 return isUnconditional() ? 0 : reinterpret_cast(Operands[2].get());
9090 }
9191
9292 void setCondition(Value *V) {
9999 //
100100 void setUnconditionalDest(BasicBlock *Dest) {
101101 if (isConditional()) Operands.erase(Operands.begin()+1, Operands.end());
102 Operands[0] = (Value*)Dest;
102 Operands[0] = reinterpret_cast(Dest);
103103 }
104104
105105 virtual const BasicBlock *getSuccessor(unsigned i) const {
108108 cast(Operands[1].get());
109109 }
110110 inline BasicBlock *getSuccessor(unsigned idx) {
111 return (BasicBlock*)((const BranchInst *)this)->getSuccessor(idx);
111 const BranchInst *BI = this;
112 return const_cast(BI->getSuccessor(idx));
112113 }
113114
114115 virtual void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
115116 assert(idx < getNumSuccessors() && "Successor # out of range for Branch!");
116 Operands[idx] = (Value*)NewSucc;
117 Operands[idx] = reinterpret_cast(NewSucc);
117118 }
118119
119120 virtual unsigned getNumSuccessors() const { return 1+isConditional(); }
175176
176177 virtual void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
177178 assert(idx < getNumSuccessors() && "Successor # out of range for switch!");
178 Operands[idx*2+1] = (Value*)NewSucc;
179 Operands[idx*2+1] = reinterpret_cast(NewSucc);
179180 }
180181
181182 // getSuccessorValue - Return the value associated with the specified
242243 }
243244
244245 inline void setNormalDest(BasicBlock *B){
245 Operands[1] = (Value*)B;
246 Operands[1] = reinterpret_cast(B);
246247 }
247248
248249 inline void setExceptionalDest(BasicBlock *B){
249 Operands[2] = (Value*)B;
250 Operands[2] = reinterpret_cast(B);
250251 }
251252
252253 virtual const BasicBlock *getSuccessor(unsigned i) const {
260261
261262 virtual void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
262263 assert(idx < 2 && "Successor # out of range for invoke!");
263 Operands[idx+1] = (Value*)NewSucc;
264 Operands[idx+1] = reinterpret_cast(NewSucc);
264265 }
265266
266267 virtual unsigned getNumSuccessors() const { return 2; }
112112 case Type::LongTyID: return castToLong(V);
113113 case Type::FloatTyID: return castToFloat(V);
114114 case Type::DoubleTyID: return castToDouble(V);
115 case Type::PointerTyID:return castToPointer(V, (PointerType*)Ty);
115 case Type::PointerTyID:
116 return castToPointer(V, reinterpret_cast(Ty));
116117 default: return 0;
117118 }
118119 }
124125 static inline ConstRules *get(const Constant &V1, const Constant &V2) {
125126 if (isa(V1) || isa(V2))
126127 return getConstantExprRules();
127 return (ConstRules*)V1.getType()->getOrCreateAnnotation(AID);
128 return static_cast(V1.getType()->getOrCreateAnnotation(AID));
128129 }
129130 private:
130131 static ConstRules *getConstantExprRules();
112112 case Type::LongTyID: return castToLong(V);
113113 case Type::FloatTyID: return castToFloat(V);
114114 case Type::DoubleTyID: return castToDouble(V);
115 case Type::PointerTyID:return castToPointer(V, (PointerType*)Ty);
115 case Type::PointerTyID:
116 return castToPointer(V, reinterpret_cast(Ty));
116117 default: return 0;
117118 }
118119 }
124125 static inline ConstRules *get(const Constant &V1, const Constant &V2) {
125126 if (isa(V1) || isa(V2))
126127 return getConstantExprRules();
127 return (ConstRules*)V1.getType()->getOrCreateAnnotation(AID);
128 return static_cast(V1.getType()->getOrCreateAnnotation(AID));
128129 }
129130 private:
130131 static ConstRules *getConstantExprRules();