[LLVMbugs] [Bug 3521] New: Handling of constant initializers needs cleaning

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Feb 9 13:06:29 PST 2009


           Summary: Handling of constant initializers needs cleaning
           Product: clang
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Semantic Analyzer
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: daniel at zuster.org
                CC: llvmbugs at cs.uiuc.edu

Sema currently has some extra code for accepting static initializers which is
not present in Evaluate. As a consequence, isConstantInitializer returns false
for things which Sema has accepted as constant initializers.

This causes problems for CodeGen, which should not have to replicate this code.

For example, replacing calls to CheckConstantInitializer with:
if (!CheckForConstantInitializer(Init, DclT))
  assert(Init->isConstantInitializer(Context) && "Invalid
CheckForConstantInitializer result.");
results in 10 assertions just when running the clang test suite.

We need a number of cleanups here:
1. Decl's should distinguish between constant and non-constant initializers

2. The special Sema code for accepting more things as constant initializers
needs to be killed off and moved into Evaluate.

3. CodeGen should stop doing any more work than is necessary to emit constant
initializers. The constant emission should only worry about walking the
initializer tree, but not about actually constructing values for things; it
should rely on Evaluate for that.

This bug is a placeholder for this work.

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list