forked from OSchip/llvm-project
Template instantiation for the GNU address-of-label extension.
llvm-svn: 72301
This commit is contained in:
parent
a838a40bc4
commit
93fcf93bc6
|
@ -55,7 +55,7 @@ namespace {
|
|||
OwningExprResult VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E);
|
||||
OwningExprResult VisitCXXConditionDeclExpr(CXXConditionDeclExpr *E);
|
||||
OwningExprResult VisitConditionalOperator(ConditionalOperator *E);
|
||||
// FIXME: AddrLabelExpr
|
||||
OwningExprResult VisitAddrLabelExpr(AddrLabelExpr *E);
|
||||
OwningExprResult VisitStmtExpr(StmtExpr *E);
|
||||
OwningExprResult VisitTypesCompatibleExpr(TypesCompatibleExpr *E);
|
||||
OwningExprResult VisitShuffleVectorExpr(ShuffleVectorExpr *E);
|
||||
|
@ -526,6 +526,13 @@ TemplateExprInstantiator::VisitConditionalOperator(ConditionalOperator *E) {
|
|||
move(Cond), move(LHS), move(RHS));
|
||||
}
|
||||
|
||||
Sema::OwningExprResult
|
||||
TemplateExprInstantiator::VisitAddrLabelExpr(AddrLabelExpr *E) {
|
||||
return SemaRef.ActOnAddrLabel(E->getAmpAmpLoc(),
|
||||
E->getLabelLoc(),
|
||||
E->getLabel()->getID());
|
||||
}
|
||||
|
||||
Sema::OwningExprResult TemplateExprInstantiator::VisitStmtExpr(StmtExpr *E) {
|
||||
Sema::OwningStmtResult SubStmt
|
||||
= SemaRef.InstantiateCompoundStmt(E->getSubStmt(), TemplateArgs, true);
|
||||
|
|
|
@ -178,6 +178,14 @@ template<typename T> struct IndirectGoto0 {
|
|||
void f(T x) {
|
||||
// FIXME: crummy error message below
|
||||
goto *x; // expected-error{{incompatible}}
|
||||
|
||||
prior:
|
||||
T prior_label = &&prior;
|
||||
|
||||
T later_label = &&later;
|
||||
|
||||
later:
|
||||
(void)(1+1);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue