Genetic programming (GP) is an evolutionary computation technique to solve problems in an automated, domain-independent way. Rather than identifying the optimum of a function as in more traditional evolutionary optimization, the aim of GP is to evolve computer programs with a given functionality. While many GP applications have produced human competitive results, the theoretical understanding of what problem characteristics and algorithm properties allow GP to be effective is comparatively limited. Compared with traditional evolutionary algorithms for function optimization, GP applications are further complicated by two additional factors: the variable-length representation of candidate programs, and the difficulty of evaluating their quality efficiently. Such difficulties considerably impact the runtime analysis of GP, where space complexity also comes into play. As a result, initial complexity analyses of GP have focused on restricted settings such as the evolution of trees with given structures or the estimation of solution quality using only a small polynomial number of input/output examples. However, the first computational complexity analyses of GP for evolving proper functions with defined input/output behavior have recently appeared. In this chapter, we present an overview of the state of the art.Algorithm 1: The (1+1) GP 1 Initialize a tree X;We will also consider the theoretical work on GSGP, where the variation operators used by the GP system are designed to modify program semantics rather than program syntax.This chapter presents an overview of the state of the art. It is structured as follows. In Section 2, we introduce the (1 + 1) GP, the GP system used for most of the available computational complexity analysis results. In Section 3, we present an overview of the analyses of GP systems for evolving tree structures with specific properties (the Order, Majority, and Sorting problems). In Section 4, we present results where GP systems evolve programs with limited functionality: the MAX problem is considered in Subsection 4.1, and the Identification problem in Subsection 4.2. Section 5 presents results for GP evolving proper Boolean functions of arity n. Section 6 presents a brief overview of the computational complexity results available for GSGP algorithms. Finally, Section 7 presents a summary of the presented results and discusses the open directions for future work.