[LLVMbugs] [Bug 2092] New: DeclRefExpr and EnumConstantDecl have different signedness

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Feb 25 13:47:01 PST 2008


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

           Summary: DeclRefExpr and EnumConstantDecl have different
                    signedness
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: parser
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: kremenek at cs.stanford.edu
                CC: llvmbugs at cs.uiuc.edu, snaroff at apple.com


Consider the following code:

  enum prefixes { PPS_LREP, PPS_SEG, PPS_OSIZE, PPS_ASIZE, MAXPREFIX };

  int assemble () {
    int j = 0;
    return j < MAXPREFIX;
  }


In the return statement, the AST node for MAXPREFIX is a DeclRefExpr that
references an EnumConstantDecl for MAXPREFIX.  This DeclRefExpr has type 'int',
which represents a signed integer.  The EnumConstantDecl for MAXPREFIX
constants an APSInt object that represents an integer constant; this APSInt
object, however, is marked "unsigned"  (i.e., the method APSINT::isUnsigned()
returns true).  Here is the AST dump:

  int assemble()
  (CompoundStmt 0x9065e0 <assemble.i:7:17, line:10:1>
    (DeclStmt 0x906350 <:0:0>
      0x906520 "int j =
        (IntegerLiteral 0x906550 <assemble.i:8:11> 'int' 0)"
    (ReturnStmt 0x9065d0 <line:9:3, col:14>
      (BinaryOperator 0x9065b0 <col:10, col:14> 'int' '<'
        (DeclRefExpr 0x906570 <col:10> 'int' BlockVar='j' 0x906520)
        (DeclRefExpr 0x906590 <col:14> 'int' EnumConstant='MAXPREFIX'
0x9063f0))))

The bug is that either the DeclRefExpr that wraps the EnumConstant should have
an unsigned type (and thus we should have an implicit cast somewhere) or that
the internal APSInt value of the EnumConstant should be marked signed.


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