@@ -2085,32 +2085,31 @@ bool SemaOpenACC::CheckDeclareClause(SemaOpenACC::OpenACCParsedClause &Clause,
2085
2085
}
2086
2086
} else {
2087
2087
const auto *DRE = cast<DeclRefExpr>(VarExpr);
2088
- const VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl ());
2089
- if (Var)
2088
+ if (const auto *Var = dyn_cast<VarDecl>(DRE->getDecl ())) {
2090
2089
CurDecl = Var->getCanonicalDecl ();
2091
2090
2092
- // OpenACC3.3 2.13:
2093
- // A 'declare' directive must be in the same scope as the declaration of
2094
- // any var that appears in the clauses of the directive or any scope
2095
- // within a C/C++ function.
2096
- // We can't really check 'scope' here, so we check declaration context,
2097
- // which is a reasonable approximation, but misses scopes inside of
2098
- // functions.
2099
- if (removeLinkageSpecDC (Var-> getCanonicalDecl ()
2100
- ->getLexicalDeclContext ()
2101
- -> getPrimaryContext ()) != DC) {
2102
- Diag (VarExpr-> getBeginLoc (), diag::err_acc_declare_same_scope)
2103
- << Clause. getClauseKind () ;
2104
- continue ;
2105
- }
2106
- // OpenACC3.3 2.13:
2107
- // C and C++ extern variables may only appear in 'create',
2108
- // 'copyin', 'deviceptr', 'device_resident', or 'link' clauses on a
2109
- // 'declare' directive.
2110
- if (!IsSpecialClause && Var && Var-> hasExternalStorage ()) {
2111
- Diag (VarExpr-> getBeginLoc (), diag::err_acc_declare_extern)
2112
- << Clause. getClauseKind () ;
2113
- continue ;
2091
+ // OpenACC3.3 2.13:
2092
+ // A 'declare' directive must be in the same scope as the declaration of
2093
+ // any var that appears in the clauses of the directive or any scope
2094
+ // within a C/C++ function.
2095
+ // We can't really check 'scope' here, so we check declaration context,
2096
+ // which is a reasonable approximation, but misses scopes inside of
2097
+ // functions.
2098
+ if (removeLinkageSpecDC (
2099
+ Var ->getLexicalDeclContext ()-> getPrimaryContext ()) != DC) {
2100
+ Diag (VarExpr-> getBeginLoc (), diag::err_acc_declare_same_scope)
2101
+ << Clause. getClauseKind ();
2102
+ continue ;
2103
+ }
2104
+ // OpenACC3.3 2.13:
2105
+ // C and C++ extern variables may only appear in 'create',
2106
+ // 'copyin', 'deviceptr', 'device_resident', or 'link' clauses on a
2107
+ // 'declare' directive.
2108
+ if (!IsSpecialClause && Var-> hasExternalStorage ()) {
2109
+ Diag (VarExpr-> getBeginLoc (), diag::err_acc_declare_extern)
2110
+ << Clause. getClauseKind ();
2111
+ continue ;
2112
+ }
2114
2113
}
2115
2114
2116
2115
// OpenACC3.3 2.13:
0 commit comments