[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cfe-commits
Subject:    Re: [PATCH] Sema: Fix some undefined behaviour when acting on redeclarations
From:       Justin Bogner <mail () justinbogner ! com>
Date:       2015-06-30 23:57:58
Message-ID: m26164vjeh.fsf () chronotis ! apple ! com
[Download RAW message or body]

ping

Justin Bogner <mail@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@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);
_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic