forked from OSchip/llvm-project
32 lines
871 B
C
32 lines
871 B
C
// RUN: %clang %s -o %t && %run %t
|
|
// Verify that even if iconv returned -1
|
|
// we still treat the initialized part of outbuf as properly initialized.
|
|
|
|
// UNSUPPORTED: android
|
|
|
|
#include <iconv.h>
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
|
|
int main() {
|
|
iconv_t cd = iconv_open("UTF-8", "no");
|
|
assert(cd != (iconv_t)-1);
|
|
char in[11] = {0x7e, 0x7e, 0x5f, 0x53, 0x55, 0x3e,
|
|
0x99, 0x3c, 0x7e, 0x7e, 0x7e};
|
|
fprintf(stderr, "cd: %p\n", (void*)cd);
|
|
char out[100];
|
|
char *inbuf = &in[0];
|
|
size_t inbytesleft = 11;
|
|
char *outbuf = &out[0];
|
|
size_t outbytesleft = 100;
|
|
int ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
|
|
assert(ret == -1);
|
|
assert(outbuf - &out[0] == 10);
|
|
for (int i = 0; i < 10; i++) {
|
|
if (out[i] == 0x77) return 1;
|
|
fprintf(stderr, "OUT%d 0x%x -- OK\n", i, (unsigned char)out[i]);
|
|
}
|
|
iconv_close(cd);
|
|
}
|
|
|