[LLVMbugs] [Bug 2830] New: Cpp Backend doesn' t generate correct code for Switch instructions

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Fri Sep 26 02:19:03 PDT 2008


http://llvm.org/bugs/show_bug.cgi?id=2830

           Summary: Cpp Backend doesn't generate correct code for Switch
                    instructions
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Keywords: miscompilation
          Severity: normal
          Priority: P2
         Component: Backend: C
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: bobby at sharedrealm.com
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=2039)
 --> (http://llvm.org/bugs/attachment.cgi?id=2039)
bitcode containing switch insturction with 'i32 0' case statement.

I am trying to compile some bitcode to LLVM API calls using the Cpp backend:
llc -march=cpp --cppgen=program -o test.cpp test.bc

Compiling the generated C++ code fails with this error:

test.cpp: In function 'llvm::Module* makeLLVMModule()':
test.cpp:148: error: invalid conversion from 'llvm::Constant*' to
'llvm::ConstantInt*'
test.cpp:148: error:   initializing argument 1 of 'void
llvm::SwitchInst::addCase(llvm::ConstantInt*, llvm::BasicBlock*)'


The problem is with this LLVM IR code:
  switch i32 %1, label %bb5 [
    i32 0, label %bb6
    i32 1, label %bb2
  ]

The 'i32' constants '0' & '1' are defined with this c++ code:
  // Constant Definitions
  Constant* const_int32_7 = Constant::getNullValue(IntegerType::get(32));
  ConstantInt* const_int32_8 = ConstantInt::get(APInt(32,  "1", 1, 10));

and the switch instruction is created with this code:

    SwitchInst* void_11 = SwitchInst::Create(int32_10, label_bb5, 3,
label_entry);
    void_11->addCase(const_int32_7, label_bb6);
    void_11->addCase(const_int32_8, label_bb2);

The 'addCase' method accepts a llvm::ConstantInt* as it's first argument, but
the 'i32 0' constant was created as just an 'llvm::Constant*'

P.S. Can someone add a "Backend: Cpp" Component to Bugzilla.


-- 
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