compiler: limit level of pointer-to-pointer-to-... types
Этот коммит содержится в:
родитель
f5f4751088
коммит
0212f0c008
1 изменённых файлов: 4 добавлений и 0 удалений
|
@ -133,6 +133,10 @@ func (c *compilerContext) getTypeCode(typ types.Type) llvm.Value {
|
||||||
if _, ok := typ.Elem().(*types.Pointer); ok {
|
if _, ok := typ.Elem().(*types.Pointer); ok {
|
||||||
// For a pointer to a pointer, we just increase the pointer by 1
|
// For a pointer to a pointer, we just increase the pointer by 1
|
||||||
ptr := c.getTypeCode(typ.Elem())
|
ptr := c.getTypeCode(typ.Elem())
|
||||||
|
// if the type is already *****T or higher, we can't make it.
|
||||||
|
if typstr := typ.String(); strings.HasPrefix(typstr, "*****") {
|
||||||
|
c.addError(token.NoPos, fmt.Sprintf("too many levels of pointers for typecode: %s", typstr))
|
||||||
|
}
|
||||||
return llvm.ConstGEP(c.ctx.Int8Type(), ptr, []llvm.Value{
|
return llvm.ConstGEP(c.ctx.Int8Type(), ptr, []llvm.Value{
|
||||||
llvm.ConstInt(llvm.Int32Type(), 1, false),
|
llvm.ConstInt(llvm.Int32Type(), 1, false),
|
||||||
})
|
})
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче