[PR26550] Use a different TBAA root for C++ vs C.
authorManman Ren <manman.ren@gmail.com>
Thu, 11 Feb 2016 19:19:18 +0000 (19:19 +0000)
committerManman Ren <manman.ren@gmail.com>
Thu, 11 Feb 2016 19:19:18 +0000 (19:19 +0000)
commit37dec10dbc58f0da9b90861aa04d11ae0ed39935
tree08bb97d574090074c90e770e40f94df0ac540cd5
parentbde158cbc7fabe7b6d4cad12a6884a98623948b9
[PR26550] Use a different TBAA root for C++ vs C.

This commit changes the root from "Simple C/C++ TBAA" to "Simple C++ TBAA" for
C++.

The problem is that the type name in the TBAA nodes is generated differently
for C vs C++. If we link an IR file for C with an IR file for C++, since they
have the same root and the type names are different, accesses to the two type
nodes will be considered no-alias, even though the two type nodes are from
the same type in a header file.

The fix is to use different roots for C and C++. Types from C will be treated
conservatively in respect to types from C++.

Follow-up commits will change the C root to "Simple C TBAA" plus some mangling
change for C types to make it a little more aggresive.

llvm-svn: 260567
clang/lib/CodeGen/CodeGenTBAA.cpp
clang/test/CodeGen/tbaa-class.cpp
clang/test/CodeGen/tbaa-for-vptr.cpp
clang/test/CodeGen/tbaa.cpp