[LLVMbugs] [Bug 3612] New: printf(printf); leads to invalid codegen and no diagnosis

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Wed Feb 18 10:43:03 PST 2009


           Summary: printf(printf); leads to invalid codegen and no
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: LLVM Codegen
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: alexei.svitkine at gmail.com
                CC: llvmbugs at cs.uiuc.edu

This is a new bug. It used to generated expected results a week ago
(diagnostics and expected code gen).

Compiling the following code:

#include <stdio.h>

int foo(void) {
  return printf(printf);

Results in the following codegen'd function (and no diagnostics from clang!):

define i32 @__ccons_anon1() nounwind {
        %retval = alloca i32            ; <i32*> [#uses=2]
        %call = call i32 (i8*, ...)* @printf(i8* bitcast (i32 (i8*, ...)*
@printf1 to i8*))             ; <i32> [#uses=1]
        store i32 %call, i32* %retval
        %0 = load i32* %retval          ; <i32> [#uses=1]
        ret i32 %0

When this function is then attempted to be executed with llvm, it results in
the following assert:

ERROR: Program used external function 'printf1' which could not be resolved!

The expected behaviour (which used to be the case 1 week ago or so) is:

First of all, diagnostics produced due to incorrect pointer type being passed.
Second of all, the calling of foo() succeeding and printf treating a pointer to
itself as a string and printing some garbage (until it encounters a zero).

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