forked from llvm-mirror/clang
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revert r301742, which caused us to try to evaluate all full-expressions.
Also add testcases for a bunch of expression forms that cause our evaluator to crash. See PR33140 and PR32864 for crashes that this was causing. This reverts r305287, which reverted r305239, which reverted r301742. The previous revert claimed that buildbots were broken, but did not add any testcases and the buildbots have lost all memory of what was wrong here. Changes to test/OpenMP are not reverted; another change has triggered those tests to change their output in the same way that r301742 did. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@306346 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
5 changed files
with
85 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// RUN: %clang_cc1 -std=c++1z -verify %s | ||
|
||
namespace pr32864_0 { | ||
struct transfer_t { | ||
void *fctx; | ||
}; | ||
template <typename Ctx> class record { | ||
void run() { | ||
transfer_t t; | ||
Ctx from{t.fctx}; | ||
} | ||
}; | ||
} | ||
|
||
namespace pr33140_0a { | ||
struct S { | ||
constexpr S(const int &a = 0) {} | ||
}; | ||
void foo(void) { S s[2] = {}; } | ||
} | ||
|
||
namespace pr33140_0b { | ||
bool bar(float const &f = 0); | ||
bool foo() { return bar() && bar(); } | ||
} | ||
|
||
namespace pr33140_2 { | ||
// FIXME: The declaration of 'b' below should lifetime-extend two int | ||
// temporaries, invalidating this warning to some extent. | ||
struct A { int &&r = 0; }; // expected-warning {{binding reference member 'r' to a temporary}} expected-note {{here}} | ||
struct B { A x, y; }; | ||
B b = {}; | ||
} | ||
|
||
namespace pr33140_3 { | ||
typedef struct Y { unsigned int c; } Y_t; | ||
struct X { | ||
Y_t a; | ||
}; | ||
struct X foo[2] = {[0 ... 1] = {.a = (Y_t){.c = 0}}}; | ||
} | ||
|
||
namespace pr33140_6 { | ||
struct Y { unsigned int c; }; | ||
struct X { struct Y *p; }; | ||
int f() { | ||
// FIXME: This causes clang to crash. | ||
//return (struct X[2]){ [0 ... 1] = { .p = &(struct Y&)(struct Y&&)(struct Y){0} } }[0].p->c; | ||
return 0; | ||
} | ||
} | ||
|
||
namespace pr33140_10 { | ||
int a(const int &n = 0); | ||
bool b() { return a() == a(); } | ||
} |