Feat: integra fluxo de tratamento de variáveis globais#175
Merged
Conversation
2 tasks
Phill-Chill
approved these changes
Jun 25, 2026
Phill-Chill
left a comment
Collaborator
There was a problem hiding this comment.
Revisão concluída com sucesso. A implementação atende a todos os requisitos estabelecidos para o suporte à geração de código e endereçamento de variáveis globais.
Destaco os seguintes aspectos técnicos da submissão:
- TAC e Lowering: A introdução explícita de
Operand::GlobaleTacGlobalcorrige a lacuna estrutural anterior, garantindo o rastreio correto de tamanho e inicialização estática (zero-init ou expressões constantes). - Codegen (x86-64): A separação precisa entre seções
.data(inicializadas) e.bss(não inicializadas), combinada com o uso seguro do endereçamento RIP-relative (%rip), demonstra excelente adequação à arquitetura-alvo e impede a alocação indevida no stack frame. - Resolução de Escopo (Shadowing): A separação e precedência correta das tabelas de símbolos locais e globais assegura a corretude léxica, ocultando a global apenas temporariamente durante o escopo interno.
Código validado frente aos critérios de aceite e coberto pelos testes E2E. Pull Request aprovado e pronto para integração.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexto
Durante a implementação de acesso a membros de structs, foi identificado que declarações globais como:
passavam pela análise semântica, mas falhavam no lowering com o erro:
Isso acontecia porque
lower_programprocessava apenasDecl::Function, ignorando completamenteDecl::GlobalVar.Causa raiz
O backend assumia que todo
Operand::Varrepresentava uma variável local da função atual:.dataou.bss.offset(%rbp).Framenão diferenciava variáveis locais de símbolos globais.Solução
Este PR adiciona suporte completo a variáveis globais no fluxo de geração de código.
TAC e lowering
TacGlobalaoTacProgram.Operand::Globalpara distinguir globais de variáveis locais.Decl::GlobalVarantes do lowering das funções.Resolução de nomes
forpermanecem visíveis somente durante o loop.Codegen x86-64
.data..bss.leaq nome(%rip)para obter o endereço de uma global..note.GNU-stacksomente em plataformas compatíveis com ELF.Testes
Foram adicionados testes ponta a ponta cobrindo:
tests/integration/valid/structs.c.tests/integration/valid/typedef.c.A suíte completa foi executada com:
cargo test --all-targetsResultado:
Critérios de aceite
int counter; int main(void) { counter = 41; return counter + 1; }compila e retorna42.tests/integration/valid/structs.ccompila, linka e executa via GCC.tests/integration/valid/typedef.ccompila, linka e executa via GCC..datae.bss.