Ignore trailing NullStmts in compound expressions when determining the result type and value. This is to match the GCC behavior which ignores semicolons at the end of compound expressions. Patch by Dominic Ferreira. llvm-svn: 365498
55 lines
1.1 KiB
C++
55 lines
1.1 KiB
C++
// RUN: %clang_cc1 %s -fsyntax-only -pedantic -verify
|
|
|
|
void foo() {
|
|
return foo();
|
|
}
|
|
|
|
// PR6451 - C++ Jump checking
|
|
struct X {
|
|
X();
|
|
};
|
|
|
|
void test2() {
|
|
goto later; // expected-error {{cannot jump}}
|
|
X x; // expected-note {{jump bypasses variable initialization}}
|
|
later:
|
|
;
|
|
}
|
|
|
|
namespace PR6536 {
|
|
struct A {};
|
|
void a() { goto out; A x; out: return; }
|
|
}
|
|
|
|
void test3() {
|
|
__asm__ ("":"+r" (test3)); // expected-error{{invalid lvalue in asm output}}
|
|
}
|
|
|
|
void test4(); // expected-note{{possible target for call}}
|
|
void test4(int) { // expected-note{{possible target for call}}
|
|
// expected-error@+1{{overloaded function could not be resolved}}
|
|
__asm__ ("":"+r" (test4)); // expected-error{{invalid lvalue in asm output}}
|
|
}
|
|
void test5() {
|
|
char buf[1];
|
|
__asm__ ("":"+r" (buf));
|
|
}
|
|
|
|
struct MMX_t {};
|
|
void test6() { __asm__("" : "=m"(*(MMX_t *)0)); }
|
|
|
|
template <typename T>
|
|
T test7(T v) {
|
|
return ({ // expected-warning{{use of GNU statement expression extension}}
|
|
T a = v;
|
|
a;
|
|
;
|
|
;
|
|
});
|
|
}
|
|
|
|
void test8() {
|
|
int a = test7(1);
|
|
double b = test7(2.0);
|
|
}
|