[PATCH] Sema: Fix some undefined behaviour when acting on redeclarations
Justin Bogner
mail at justinbogner.com
Tue Jun 30 16:57:58 PDT 2015
ping
Justin Bogner <mail at justinbogner.com> writes:
> If we hit an error already, we may have set Name to nullptr, which
> means calling isAcceptableTagRedeclaration hits UB. Avoid this like we
> do elsewhere in the function by checking Name first.
>
> We could also fix this by passing OrigName instead, since the name is
> only used for diagnostics anyway. Should I do that instead, or is this
> good to commit?
>
> commit 203946970eafb48a120b29dfac1612b8762b9115
> Author: Justin Bogner <mail at justinbogner.com>
> Date: Mon Jun 22 00:05:05 2015 -0700
>
> Sema: Fix some undefined behaviour when acting on redeclarations
>
> If we hit an error already, we may have set Name to nullptr, which
> means calling isAcceptableTagRedeclaration hits UB. Avoid this like we
> do elsewhere in the function by checking Name first.
>
> diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
> index ce89d99..8c94460 100644
> --- a/lib/Sema/SemaDecl.cpp
> +++ b/lib/Sema/SemaDecl.cpp
> @@ -11747,9 +11747,9 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
> SS.isNotEmpty() || isExplicitSpecialization)) {
> // Make sure that this wasn't declared as an enum and now used as a
> // struct or something similar.
> - if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind,
> - TUK == TUK_Definition, KWLoc,
> - *Name)) {
> + if (Name && !isAcceptableTagRedeclaration(PrevTagDecl, Kind,
> + TUK == TUK_Definition, KWLoc,
> + *Name)) {
> bool SafeToContinue
> = (PrevTagDecl->getTagKind() != TTK_Enum &&
> Kind != TTK_Enum);
More information about the cfe-commits
mailing list