Based on post-commit review discussion on2bd8493847with Richard Smith. Other uses of forcing HasEmptyPlaceHolder to false seem OK to me - they're all around pointer/reference types where the pointer/reference token will appear at the rightmost side of the left side of the type name, so they make nested types (eg: the "int" in "int *") behave as though there is a non-empty placeholder (because the "*" is essentially the placeholder as far as the "int" is concerned). This was originally committed in277623f4d5Reverted inf9ad1d1c77due to breakages outside of clang - lldb seems to have some strange/strong dependence on "char [N]" versus "char[N]" when printing strings (not due to that name appearing in DWARF, but probably due to using clang to stringify type names) that'll need to be addressed, plus a few other odds and ends in other subprojects (clang-tools-extra, compiler-rt, etc).
27 lines
881 B
C
27 lines
881 B
C
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
|
|
|
typedef int Arr[10];
|
|
|
|
typedef int trungl_int;
|
|
|
|
void f(int a[10], Arr arr) { // expected-note 4 {{declared here}}
|
|
|
|
/* Should warn. */
|
|
(void)sizeof(a); // \
|
|
// expected-warning{{sizeof on array function parameter will return size of 'int *' instead of 'int[10]'}}
|
|
(void)sizeof((((a)))); // \
|
|
// expected-warning{{sizeof on array function parameter will return size of 'int *' instead of 'int[10]'}}
|
|
(void)sizeof a; // \
|
|
// expected-warning{{sizeof on array function parameter will return size of 'int *' instead of 'int[10]'}}
|
|
(void)sizeof arr; // \
|
|
// expected-warning{{sizeof on array function parameter will return size of 'int *' instead of 'Arr' (aka 'int[10]')}}
|
|
|
|
/* Shouldn't warn. */
|
|
int b[10];
|
|
(void)sizeof b;
|
|
Arr brr;
|
|
(void)sizeof brr;
|
|
(void)sizeof(Arr);
|
|
(void)sizeof(int);
|
|
}
|