ChuanqiXu9 wrote:

> > I concluded that the local queue introduced in the previous commits isn’t 
> > necessary in C mode. Since attribute equivalence is currently checked only 
> > for C23, I removed the code entirely.
> > If we later enable attribute equivalence checking in C++ mode, we may need 
> > to revisit this and adopt a similar approach. For example, without a 
> > separate queue, clang will diagnose the attribute but fail to report the 
> > mismatch in the type of member `a` when attempting to merge the following 
> > struct:
> > ```
> > struct GuardedBy {
> >   int b __attribute__((guarded_by(lock)));
> >   // The pair of S is added to NonEquivalentDecls, but the pair of Lock 
> > isn't. 
> >   struct __attribute__ ((lockable)) Lock {
> >     struct S {
> > #ifdef D1
> >       unsigned a;
> > #else
> >       int a;
> > #endif
> >     } s;
> >   } lock;
> > };
> > ```
> > 
> > 
> >     
> >       
> >     
> > 
> >       
> >     
> > 
> >     
> >   
> > $ clang -cc1 -std=c++20 -emit-pch -o f1.ast -x c++ test.h $ clang -cc1 
> > -std=c++20 -emit-pch -o f2.ast -DD1 -x c++ test.h $ clang -cc1 -std=c++20 
> > -ast-merge f1.ast -ast-merge f2.ast -x c++ test.cpp
> 
> CC @ChuanqiXu9 @Bigcheese as C++ modules maintainers. I am under the 
> impression we need this for both C++ modules support and C23's redefinition 
> checking. If we don't need the more complicated approach right now, I think 
> the current approach is reasonable for C (but CC @erichkeane for awareness of 
> the tablegen changes), I just want to make sure we're not making further work 
> harder for ourselves.

In modules (Serialization), we already have ODR checks to check the 
redefinitions are the same. So this is not needed for modules.

https://github.com/llvm/llvm-project/pull/168769
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to